2017-05-23 15 views
21

我正尝试在IPP(Internet打印协议)的第二个纸盘上打印文档。我正在使用这个npm IPP-Library无法通过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(); 

其他变种我试图在(从here)以下:

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返回的其他托盘中的第二纸支持media-source,但第一纸盒作品。

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

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

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

+1

仅供参考:https://github.com/williamkapke/ipp/issues/43 – Sam

+0

感谢您引用问题我的代码基于=)我完全忘了添加引用 – Batajus

回答

0

这已经有一段时间,因为我要求帮助。感谢所有的贡献=)

我尝试了所有建议的解决方案从这里和Github,但他们都没有工作,但我找到了解决方案来解决我的问题。

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": { 
      // OLD WAY WHICH DOES NOT WORK 
      //"media-col": { 
      // "media-source": "tray-2" 
      //}, 
     }, 
     // SOLUTION 
     "job-attributes-tag":{ 
      "media": ["tray-2"] 
     }, 
     data: data 
    }; 

    printer.execute("Print-Job", file, function (err, res) { 
     console.log("Printed: " + res.statusCode); 
    }); 

})); 

doc.end(); 

我试过这个,因为here(4.2。11)是具有描述media

为“媒体”的值包括中等名称,中等大小,输入 - 托盘和电子表格,使得一个属性指定媒体。

4

看起来this pull request可能能够解决您遇到的问题。直到ipp笔者合并拉请求,您可以更新您的NPM包在你的项目目录中运行以下为指向补丁:

npm i --save [email protected]:jaymcaliley/ipp 
0

给您发送的请求的响应与状态代码400发送到打印机的请求。

这里可以看到on line 30

这可能是由防火墙配置或错误的网络设置引起的。

您需要正确指定打印机的URL就像这个例子,并检查该网址是否有效和打印机响应它:

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