首先,GCP 文档错误地指出您可以使用 /list 服务接口检索打印机功能。那是行不通的。您必须调用确实返回打印机功能的 /printer 服务。这些功能只是一个 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之类的东西,从 Chrome 对 /cloudprint/submit 服务的 POST 请求中提取票证参数的值。