【问题标题】:Print Job delay when using IPP for Node JS使用 IPP for Node JS 时的打印作业延迟
【发布时间】:2013-11-20 22:55:53
【问题描述】:

我正在使用带有 Node JS 的 IPP(和 CUPS)从我们的子签到系统打印标签(DYMO Labelwriter 450 Turbo)。我需要根据孩子所在的房间(1-3)打印每个标签的不同数量(var qty)。目前我正在为每个标签创建一个新的 IPP 打印作业 - 但打印之间有几秒钟的延迟。

有没有办法通过每个作业将数量传递给 IPP 以消除延迟?或者也许将多个相同的 .pdf 传递到一个作业中?

变量pdf(生成的标签 - 使用.pdf template)、qty(需要打印的标签数量)和pid(要打印到的打印机的打印机ID)传递给以下代码:

function print(qty, pid, first, last, gender, room, notes, notesr, timestamp, age, grade, code) {

    fs.readFile('label.pdf', 'utf-8', function (err, pdf) {

        pdf = pdf.toString();
        pdf = pdf.replace('<FIRST>', first).replace('<LAST>', last).replace('<GENDER>', gender).replace('<ROOM>', room).replace('<NOTES>', notes).replace('<NOTESON>', notesr).replace('<TIMESTAMP>', timestamp).replace('<AGE>', age).replace('<GRADE>', grade).replace('<CODE>', code);

        if (err)
            throw err;

        var printer = ipp.Printer('http://127.0.0.1:631/printers/DYMO_'+pid);
        var file = {
            'operation-attributes-tag':{
                'requesting-user-name': 'Test User',
                'job-name': 'My Test Job',
                'document-format': 'application/pdf'
            },
            data: new Buffer(pdf, 'binary')
        };

        for (var i = 0; i < qty; i++) {
            printer.execute('Print-Job', file, function (err, res) {
                console.log('Printed: '+res.statusCode)
            })
        }
    });
}

更新:

看来我的问题是CUPS waits for the printer to return to "idle" 在它开始处理下一个作业之前 - 从而造成作业之间的延迟。需要在 DeviceURI 中添加 optionwaitprinter=false 以绕过等待。

我已尝试将其添加到 /etc/cups/printers.conf 的 DeviceURI 中,但无济于事。我尝试将其添加到 Printer 对象 url 中,例如:

var printer = ipp.Printer('http://127.0.0.1:631/printers/DYMO_'+pid+'?waitprinter=false');

打印机找不到哪些错误。如何将此选项与 IPP 一起使用?

更新 #2:

出于紧急情况,我使用pdfkit 创建了一个临时解决方案来生成多页标签pdf,并将所有家庭的标签作为单个打印作业发送。

【问题讨论】:

  • 顺便说一句,标签数量不再是问题。我决定创建 3 个 pdf 模板“label1.pdf”、“label2.pdf”、“label3.pdf”——这可以修复相同标签之间的速度,因为我可以通过一个作业将它们全部发送。我现在关心的是更新部分:使用带有 DeviceURI 的选项 waitprinter=false。谢谢!
  • 是否可以在.conf文件中全局配置waitprinter选项?
  • 在 URI 中添加了 waitprinter=false 后,您的 /etc/cups/printers.conf 配置是什么样的?

标签: javascript node.js pdf printing


【解决方案1】:

您尝试将其添加到 CUPS 主机上 /etc/cups/printers.conf 的 DeviceURI 中吗?

如果您在 CUPS 运行时通过简单地编辑该文件来做到这一点,它将无法正常工作。 通常printers.conf 不适合直接编辑。它确实在第一行中说明了这一点(尖叫“#当 CUPSD 运行时不要编辑此文件”)。

1.

永久更改打印机配置的推荐方法是在 CUPS 服务器上使用lpadmin 命令:

lpadmin -h cupsserver -P printername -E -v ipp://11.2.13.14:631/waitprinter=false

然后,CUPS 服务器将告诉 CUPS 客户端,他们可以通过以下方式访问此打印机

http://cupsserver:631/printername

(如果你真的需要直接编辑printers.conf,你必须先停止CUPS守护进程,进行编辑,然后重新启动cupsd。)

2.

要更改打印机配置临时(仅适用于下一个作业),您可以在发送作业时使用lp 命令传递选项:

lp -d printername -o waitprinter=false myjob.pdf

翻译成你的问题空间,这个解决方案意味着:

  1. 不要尝试在var printer = ipp.Printer ... 语句中更改打印机名称。

  2. 改为更改 operation-attributes-tag 并在此处添加 'waitprinter': 'false' 语句。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-18
    • 2016-03-29
    • 2019-05-26
    • 2014-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-16
    相关资源
    最近更新 更多