使用节点JS的IPP时,打印作业延迟

我使用IPP (和CUPS )和Node JS来从我们的孩子登记系统打印标签(DYMO Labelwriter 450 Turbo's)。 我需要打印每个标签的不同数量(var qty ),具体取决于孩子在哪个房间(1-3)。 目前,我正在为每个标签创build一个新的IPP打印作业 – 但打印之间有几秒钟的延迟。

有没有办法将每项工作的数量传递给IPP以消除延误? 或者可能将多个相同的.pdf传递给一个工作?

Vars 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在打印机开始处理下一个作业之前等待打印机返回“空闲”状态 ,从而在作业之间产生延迟。 需要将一个选项 waitprinter=false添加到DeviceURI以绕过等待。

我已经尝试将它添加到/etc/cups/printers.conf中的DeviceURI,但没有任何结果。 我已经尝试将其添加到Printer对象的url,如:

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

打印机无法find哪个错误 如何在IPP中使用此选项?

更新#2:

紧急之下,我使用pdfkit创build了一个解决scheme,可以即时生成多页标签pdf,并将所有家庭的标签作为单个打印作业发送。

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

如果你在CUPS运行的时候只是简单的编辑这个文件就行了,它不会起作用。 通常情况下printers.conf不适用于直接编辑。 它在第一行中声明了这一点(尖叫' 不要在CUPSD运行时编辑这个文件 ')。

1。

build议永久更改打印机configuration的方法是在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。

临时更改打印机configuration(仅限下一个作业),可以在发送作业时使用lp命令传递选项:

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

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

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

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