使用 IPP 时,使用 Node JS 打印作业会出现延迟问题。

6
我正在使用IPP(和CUPS)与Node JS打印标签(DYMO Labelwriter 450 Turbo),用于我们的儿童签到系统。根据孩子所在的房间(1-3),我需要打印不同数量(var qty)的每个标签。目前,我为每个标签创建一个新的IPP打印作业,但是在打印之间存在几秒钟的延迟。
是否有一种方法可以在每个作业中传递数量以消除延迟?或者将多个相同的.pdf传递给单个作业?
变量pdf(生成的标签 - 使用.pdf模板)、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等待打印机返回“空闲”状态,然后才开始处理下一个作业,从而在作业之间创建延迟。需要在DeviceURI中添加一个选项waitprinter=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” - 这样可以解决相同标签之间的速度问题,因为我可以将它们全部发送到单个作业中。现在我的担忧在于更新的部分:使用一个选项,waitprinter=false与DeviceURI一起。谢谢! - Josiah
在.conf文件中是否可以全局配置“waitprinter”选项? - Josiah
你的/etc/cups/printers.conf配置文件加上了waitprinter=false到URI后是什么样子的? - Jeff Sisson
1个回答

1
您尝试将其添加到CUPS主机上的/etc/cups/printers.conf中的DeviceURI吗?
如果您在CUPS运行时简单地编辑该文件,则无法正常工作。通常,printers.conf不适合直接编辑。它在其第一行中声明了这一点(大声喊叫 '# DO NOT EDIT THIS FILE WHEN CUPSD IS RUNNING')。
1.
永久更改打印机配置的推荐方法是在CUPS服务器上使用lpadmin命令:
lpadmin -h cupsserver -P printername -E -v ipp://11.2.13.14:631/waitprinter=false

CUPS 服务器随后会告知 CUPS 客户端,这台打印机可以通过以下方式访问。
http://cupsserver:631/printername

如果您确实需要直接编辑打印机配置文件,必须先停止CUPS守护程序,进行编辑,然后重新启动cupsd。
为了临时更改打印机配置(仅适用于下一次作业),您可以在发送作业时使用lp命令传递选项。
lp -d printername -o waitprinter=false myjob.pdf

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

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

  2. 相反,改变操作属性标签,并在那里添加一个 'waitprinter': 'false' 语句。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接