2013-08-30 134 views
7

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

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

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

那么您如何真正指定打印作业设置?

回答

16

首先,GCP文档错误地指出您可以使用/ list服务界面检索打印机功能。这是行不通的。您必须打电话给确实能够返回打印机功能的打印机服务。这些功能仅仅是一个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" 
    } 
    ] 

通过查看浏览器从GCP对话框发送POST请求我发现了/提交服务不使用功能参数。它实际上使用名为票证的参数来指定打印作业设置。该参数的格式很简单,它是一个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 /值对。该ID将包含从功能参数和将包含名在参数选项中的记录,或数值等一个,如功能描述。

这应该对大多数参数都适用,但如果卡住了,无法找出正确的值,则可以随时在Chrome中打开示例文档并打印出来。选择一台GCP打印机,然后单击“使用Google云打印对话框打印...”,然后从“高级选项”中进行所需的确切设置。使用类似Fiddler的东西,将Chrome请求的POST请求中的ticket参数的值提取到/ cloudprint/submit服务。

+0

您是如何捕获从GCP对话框提交的POST的?我无法做到这一点。我使用的是代理服务器,而不是提琴手,但是当点击“打印”时没有提交POST请求。 –

+0

您能够选择输入托盘吗?如果是这样,您使用的是哪种打印机?我无法弄清楚如何让GCP在我的打印机上选择一个托盘,而且我很难找到关于打印机的信息。 – TimSum