任何想要从浏览器进行无人值守打印的人都知道这不是一项简单的任务,另一方面,它对任何后台应用程序都非常有用。然后谷歌用GCP来救我们。
所以我安装好了,几分钟后我就打印了一份文件。但后来我想对打印机应用一些设置。而这是你意识到文档完全没有这一点的那一刻。它甚至没有解释如何做一些简单的事情,如将页面设置为横向。
documentation仅表示您必须以XPS或PPD格式发送功能参数。即使您能够检索打印机的功能,您也会意识到它的名称表明它描述了所有打印机功能,而不是特定打印作业的设置。
那么如何实际指定打印作业设置?
答案 0 :(得分:18)
首先,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"
}
]
通过查看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.
]
}
}
参数的第一部分对应于打印对话框中的基本设置,它们非常不言自明,值很容易更改。 vendor_ticket_item 数组有点复杂。它包含我们之前检索的打印机功能描述的id / value对。 id 将包含功能中参数的名称,值将包含其中一个的名称参数选项中的记录,或数值等,如功能中所述。
对于大多数参数来说,它应该可以正常工作,但如果您遇到问题并无法找出正确的值,您可以随时在Chrome中打开示例文档并进行打印。选择GCP打印机,然后单击“使用Google云打印对话框打印...”,然后从“高级选项”中进行所需的确切设置。使用Fiddler之类的内容将POST请求Chrome中的ticket参数值提取到/ cloudprint / submit服务。