9

任何想要从浏览器进行无人值守打印的人都知道这不是一件容易的事,另一方面,它对于任何后台应用程序都非常有用。然后谷歌用 GCP 来拯救我们。

因此,我进行了设置,并在几分钟内打印了一份文档。但后来我想对打印机应用一些设置。这是您意识到文档完全缺乏这一点的那一刻。它甚至没有解释如何做一些简单的事情,比如将页面设置为横向。

文档仅说您必须以​​ XPS 或 PPD 格式发送功能参数。即使您能够检索打印机的功能,您也会意识到,顾名思义,它描述了所有打印机功能,而不是特定打印作业的设置。

那么如何实际指定打印作业设置呢?

4

1 回答 1

19

首先,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 请求中提取票证参数的值。

于 2013-08-30T02:09:04.387 回答