无法通过IPP在另一个纸盘上打印

我正在尝试使用IPP(Internet打印协议)在第二个纸盒上打印文档。 我正在使用这个NPM IPP库 。

但是,在任何时候我尝试打印文档,我的打印机显示一条消息,我需要将纸张添加到第一个纸盒和控制台输出说: Printed: successful-ok

 var ipp = require("ipp"); var PDFDocument = require("pdfkit"); var concat = require("concat-stream"); var doc = new PDFDocument; doc.text("Hello World"); doc.pipe(concat(function (data) { var printer = ipp.Printer("MY_URL"); var file = { "operation-attributes-tag": { "requesting-user-name": "admin", 'attributes-charset': 'utf-8', 'attributes-natural-language': 'de' }, "printer-attributes": { "media-col": { "media-source": "tray-2" }, }, data: data }; printer.execute("Print-Job", file, function (err, res) { console.log("Printed: " + res.statusCode); }); })); doc.end(); 

我尝试的另一个变体是(从这里 ):

 var PDFDocument = require("pdfkit"); let fs = require('fs') var ipp = require('ipp'); var uri = "http://10.1.205.71"; var msg = new Buffer( '0200'+ //Version '000201e6d5f2'+ '01'+ //Operation attributes tag (your information in the Operation attributes might be different) '47'+ //charset tag '0012'+ //length '617474726962757465732d63686172736574'+ //attributes-charset '0005'+ //length '7574662d38'+ //utf-8 '48'+ //natural language tag '001b'+ //length '617474726962757465732d6e61747572616c2d6c616e6775616765'+//attributes-natural-language '0002'+//length '656e'+ //en '45'+ // URI tag '000b'+ //length '7072696e7465722d757269'+ //printer-uri '0012'+//length '687474703a2f2f31302e312e3230352e3731'+//http://10.1.205.71 '49'+ //mimeMediaType tag '000f'+ //length '646f63756d656e742d666f726d6174'+ //document format '000f'+ //length '6170706c69636174696f6e2f706466'+ //application/pdf '02'+ //job attributes tag '34'+ //begin collection '0009'+ //length '6d656469612d636f6c'+ //media-col '0000'+ //value length '4a'+ //collection entry '0000'+ //name length '000c'+ //value length '6d656469612d736f75726365'+ //media-source '44'+ // collection entry '0000'+ //name length '0006'+ //value length '747261792d32'+ //tray-2 '37'+ //end of collection '00000000'+ //name length and value length '03', 'hex'); var doc = new PDFDocument; doc.text("Hello World"); var buffers = []; doc.on('data', buffers.push.bind(buffers)); doc.on('end', function(){ var buf = Buffer.concat(buffers); var catBuf = Buffer.concat([msg, buf]); ipp.request(uri, catBuf, function(err, res){ if(err){ return console.log(err); } console.log(JSON.stringify(res,null,2)); }); }); doc.end(); 

但是,然后我得到这个错误消息:

 { Error at new IppResponseError (/Users/alex/dev/print/printing/node_modules/ipp/lib/request.js:72:17) at ClientRequest.<anonymous> (/Users/alex/dev/print/printing/node_modules/ipp/lib/request.js:40:8) at Object.onceWrapper (events.js:293:19) at emitOne (events.js:96:13) at ClientRequest.emit (events.js:191:7) at HTTPParser.parserOnIncomingClient [as onIncoming] (_http_client.js:522:21) at HTTPParser.parserOnHeadersComplete (_http_common.js:99:23) at Socket.socketOnData (_http_client.js:411:20) at emitOne (events.js:96:13) at Socket.emit (events.js:191:7) name: 'IppResponseError', statusCode: 400, message: 'Received unexpected response status 400 from the printer', stack: 'Error\n at new IppResponseError (/Users/alex/dev/print/printing/node_modules/ipp/lib/request.js:72:17)\n at ClientRequest.<anonymous> (/Users/alex/dev/print/printing/node_modules/ipp/lib/request.js:40:8)\n at Object.onceWrapper (events.js:293:19)\n at emitOne (events.js:96:13)\n at ClientRequest.emit (events.js:191:7)\n at HTTPParser.parserOnIncomingClient [as onIncoming] (_http_client.js:522:21)\n at HTTPParser.parserOnHeadersComplete (_http_common.js:99:23)\n at Socket.socketOnData (_http_client.js:411:20)\n at emitOne (events.js:96:13)\n at Socket.emit (events.js:191:7)' } 400 'response' 

我的打印机不支持IPP,但是我在我的Macbook上分享了它,它为所有共享打印机提供IPP服务。 如果我正在使用第一个纸盒,并在那里有纸,一切正常,但是对于我的项目,还需要在其他纸盒上打印。

Get-Printer-Attributes返回Get-Printer-Attributes列表在第二个纸盘中列出了第二个纸张作为支持的media-source ,但是只有第一个纸盘工作。

有没有人有一个想法如何成功打印另一个纸盒?

更新:我也尝试了另一台打印机,但我得到了同样的错误。

更新22.06.17:它仍然困惑,并没有任何线索如何解决这个问题。

看来这个拉取请求可能能够解决你所遇到的问题。 在ipp的作者合并pull请求之前,您可以通过在您的项目目录中运行以下命令来更新您的npm软件包以指向该修补程序:

 npm i --save ipp@github:jaymcaliley/ipp 

您要发送的请求的响应是发送给打印机的请求的状态码为400。

这可以在第30行看到。

这可能是由防火墙configuration或错误的networking设置引起的。

您需要像本例中那样正确指定打印机的URL,并检查此URL是否有效,并且打印机对此作出响应:

  var printer = ipp.Printer("http://NPI977E4E.local.:631/ipp/printer");