Node.js:如何将打印作业添加到打印机

Posted

技术标签:

【中文标题】Node.js:如何将打印作业添加到打印机【英文标题】:Node.js : How to add print job to printer 【发布时间】:2013-04-24 09:08:10 【问题描述】:

我正在使用 node.js 开发一个 Web 应用程序,我有一个场景来打印我本地的一些 pdf 文件。

例如:

var ipp = require('ipp');
var PDFDocument = require('pdfkit');

//make a PDF document
var doc = new PDFDocument(margin:0);
doc.text(".", 0, 780);

doc.output(function(pdf)
    var printer = ipp.Printer("http://NPI977E4E.local.:631/ipp/printer");
    var msg = 
        "operation-attributes-tag": 
            "requesting-user-name": "William",
            "job-name": "My Test Job",
            "document-format": "application/pdf"
        ,
        data: pdf
    ;
    printer.execute("Print-Job", msg, function(err, res)
        console.log(res);
    );
);

我已经参考了上面的示例,但是在该示例中创建了 PDF,但在我的情况下,我想打印现有的 PDF 文件。

有什么建议吗???

【问题讨论】:

【参考方案1】:
var fs = require('fs');

fs.readFile('filename.pdf', function(err, data)  
  if (err)
    throw err;

  var printer = ipp.Printer("http://YOUR.PRINTER.SERVER.HOSTNAME:631/ipp/printer");
  var msg = 
    "operation-attributes-tag": 
      "requesting-user-name": "William",
      "job-name": "My Test Job",
      "document-format": "application/pdf"
    ,
    data: data
  ;
  printer.execute("Print-Job", msg, function(err, res)
    console.log(res);
  );
);

【讨论】:

err 说了什么?顺便说一句,只是剪切和粘贴示例代码显然是行不通的,除非您的打印机也位于名为 NPI977E4E.local 的服务器上。 [错误:getaddrinfo ENOENT] 代码:'ENOTFOUND',errno:'ENOTFOUND',系统调用:'getaddrinfo' 所以将NPI977E4E.local替换为您的IPP服务器的地址或主机名。 我更改了打印机的主机名并检查了它显示的“null”。 err 为空时,表示没有发生错误。这应该是件好事。【参考方案2】:

如果我理解正确,您想打印本地 PDF 文件,并且已经可以打印了吗?

Node.js 具有可用于检索 PDF 文件的 fs api。 http://nodejs.org/api/fs.html

https://npmjs.org/package/ipp 在我看来,您似乎不必在操作中使用 PDFkit 对象作为数据属性。您可以只使用可以通过 fs 读取的数据。

【讨论】:

首先尝试让您的地址和网络配置正常工作,然后尝试在您的示例中打印该在线创建的 PDF。迈出小步。

以上是关于Node.js:如何将打印作业添加到打印机的主要内容,如果未能解决你的问题,请参考以下文章

使用 Node.js 打印 JSON 对象 [重复]

如何通过 React Native 将打印作业发送到打印机

如何在 Node JS 中打印对象

打印所有已安装的 node.js 模块的列表

将mysql数据库打印到socket.io和node.js中的html页面

Node.js 互联网打印协议 (IPP) API Oauth2 授权