使用节点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意味着:
-
不要试图在您的
var printer = ipp.Printer ...
语句中更改打印机名称。 -
而是改变操作属性标签,并在
'waitprinter': 'false'
添加一个'waitprinter': 'false'
语句。