dcb*_*dcb 9 printing google-cloud-print
任何想要从浏览器进行无人值守打印的人都知道这不是一项简单的任务,另一方面它对任何后台应用程序都非常有用.然后谷歌用GCP来救我们.
所以我得到了它设置,几分钟后我打印了一份文件.但后来我想对打印机应用一些设置.而这是你意识到文档完全没有这一点的那一刻.它甚至没有解释如何做一些简单的事情,如将页面设置为横向.
该文档仅表示您必须以XPS或PPD格式发送功能参数.即使您能够检索打印机的功能,您也会意识到它的名称表明它描述了所有打印机功能,而不是特定打印作业的设置.
那么如何实际指定打印作业设置?
dcb*_*dcb 19
首先,GCP文档错误地指出您可以使用/ list服务接口检索打印机功能.这不起作用.您必须调用/ printer服务,该服务确实返回打印机功能.这些功能只是一个JSON列表,每个JSON描述一个打印机参数以及参数可以采用的可能值.有时它也可以包含一些额外的信息.以下是我的HP支持的页面大小的小提取:
"name": "psk:PageMediaSize",
"psf:SelectionType": "psk:PickOne",
"psk:DisplayName": "Paper Size",
"type": "Feature",
"options": [
{
"psk:MediaSizeWidth": "215900",
"name": "psk:NorthAmericaLetter",
"psk:MediaSizeHeight": "279400",
"psk:DisplayName": "Letter"
},
{
"psk:MediaSizeWidth": "215900",
"name": "psk:NorthAmericaLegal",
"psk:MediaSizeHeight": "355600",
"psk:DisplayName": "Legal"
}
]
Run Code Online (Sandbox Code Playgroud)
通过查看Chrome从GCP对话框发送的POST请求,我发现/ submit服务根本不使用功能参数.它实际上使用名为ticket的参数来指定打印作业设置.参数的格式非常简单,它是一个如下所示的JSON:
{
"version":"1.0",
"print":{
"color":{"vendor_id":"psk:Color","type":0},
"duplex":{"type":0},
"page_orientation":{"type":1},
"copies":{"copies":1},
"dpi":{"horizontal_dpi":600,"vertical_dpi":600},
"media_size":{"width_microns":148000,"height_microns":210000,"is_continuous_feed":false},
"collate":{"collate":true},
"vendor_ticket_item":[
//Printer specific settings here, from the capabilities:
{"id":"psk:JobInputBin","value":"ns0000:Tray3"},
{"id":"psk:PageICMRenderingIntent","value":"psk:Photographs"},
{"id":"psk:PageMediaType","value":"ns0000:Auto"},
{"id":"psk:JobOutputBin","value":"ns0000:Auto"},
//etc.
]
}
}
Run Code Online (Sandbox Code Playgroud)
参数的第一部分对应于打印对话框中的基本设置,它们非常不言自明,值很容易更改.所述vendor_ticket_item阵列是有点复杂.它包含我们之前检索的打印机功能描述的id/value对.该标识将包含名称从性能参数和值将包含名称中的参数选项,或数值等的记录之一,如功能描述.
对于大多数参数来说,这应该可以正常工作,但如果您遇到问题并且无法找出正确的值,您可以随时在Chrome中打开示例文档并进行打印.选择GCP打印机,然后单击"使用Google云打印对话框打印...",然后从"高级选项"中进行所需的确切设置.使用像Fiddler这样的东西,将POST请求Chrome中的ticket参数值提取到/ cloudprint/submit服务.