nodejs的Internet打印协议(IPP)

时间:2013-04-24 14:32:30

标签: node.js pdf printing ipp-protocol

我正在尝试使用打印机在本地打印pdf文件。这是一个试图打印的代码。

fs.readFile('documents/AccountStatement.pdf', function(err, data) { 
    if (err)
        throw err;
    var printer = ipp.Printer("http://hostname:631/ipp/printer");
    var msg = {
    "operation-attributes-tag": {
      "requesting-user-name": "KUMA1936",
      "job-name": "My Test Job",
      "document-format": "application/pdf"
    },
    data: data
    };
    printer.execute("Print-Job", msg, function(err, res){
        console.log(res);
        console.log(err);
    });
});

在上面的代码中,printer.execute()方法和“Print-Job”参数是什么。什么631在这里。当我打印res,它的节目

{version:'1.1',   statusCode:'server-error-operation-not-supported',   id:442076,   “操作属性标签”:    {'attributes-charset':'utf-8',      'attributes-natural-language':'en-us'}} 错误是空的。

3 个答案:

答案 0 :(得分:1)

您可以查看API docs。第一个参数(字符串)是由IPP定义的操作。 有关Print-Job操作的说明已here

3.2.1 Print-Job Operation

   This REQUIRED operation allows a client to submit a print job with
   only one document and supply the document data (rather than just a
   reference to the data).  See Section 15 for the suggested steps for
   processing create operations and their Operation and Job Template
   attributes.

您可以看到其他支持IPP的操作here。 631是用于IPP的接受端口,它使用TCP。

您可以查看有关错误here的更多信息,其中显示:

13.1.5.2 server-error-operation-not-supported (0x0501)

   The IPP object does not support the functionality required to fulfill
   the request. This is the appropriate response when the IPP object
   does not recognize an operation or is not capable of supporting it.
   See sections 3.1.6.1 and 3.1.7.

这意味着您的代码中没有错误。很可能您的打印机未配置或不支持IPP。最后但并非最不重要的是,必须为IPP.Printer提供打印机IP。因此,检查您提供的IP是否有效(您的代码显示您给出了主机名)。从项目page可以看出:

To find out if your printer supports IPP:

 - Google your printer's specs
 - Try: telnet YOUR_PRINTER 631. If it connects, that's a good sign.
 - Use the '/examples/findPrinters.js' script.

答案 1 :(得分:0)

就我而言,我只是分享打印机:(比如与他人分享)

所以网址 (您将通过findPrinters.js找到)

http://My-Computer-Name.local.:631/printers/my_printer_name

如果您的打印机与计算机无法连接(如USB),这应该会有所帮助。但是通过lan连接。

答案 2 :(得分:0)

  • 看起来就像在发送IPP-2.0时获得了IPP-Version-1.1-Response。
  • 尝试使用version-option
  • 降级到1.1