使用 Google 云打印进行打印机设置

Posted

技术标签:

【中文标题】使用 Google 云打印进行打印机设置【英文标题】:Printer settings with Google Cloud Print 【发布时间】:2013-09-02 15:32:00 【问题描述】:

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

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

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

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

【问题讨论】:

【参考方案1】:

首先,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 将包含来自功能的参数的 name,而 value 将包含其中之一的 name参数选项中的记录,或数值等,如功能中所述。

这对于大多数参数来说应该可以正常工作,但是如果您遇到困难并且无法确定正确的值,您可以随时在 Chrome 中打开一个示例文档并打印它。选择一台 GCP 打印机,然后单击“使用 Google 云打印对话框打印...”,然后从“高级选项”中进行所需的确切设置。使用 Fiddler 之类的东西,从 Chrome 对 /cloudprint/submit 服务执行的 POST 请求中提取票证参数的值。

【讨论】:

您是如何捕获从 GCP 对话框提交的 POST 的?我做不到。我使用的是 Proxy,而不是 Fiddler,但是当我点击“打印”时没有提交 POST 请求。 您可以选择输入托盘吗?如果是这样,您使用的是哪种打印机?我不知道如何让 GCP 在我的打印机上选择一个纸盘,而且我很难找到有关可以使用它的打印机的信息。

以上是关于使用 Google 云打印进行打印机设置的主要内容,如果未能解决你的问题,请参考以下文章

通过 Google 云打印进行打印

使用 C# 的 Google 云打印

惠普418 云打印设置时,web服务未启用?

未找到 Google 云打印 OAuth 范围

从 javascript 调用 Google 云打印/搜索 API

XSRF 令牌验证失败 Google 云打印