我正在使用IPP(和CUPS)与Node JS一起从我们的子登记系统打印标签(DYMO Labelwriter 450 Turbo)。我需要打印每个标签的不同数量(var qty
),具体取决于孩子所在的房间(1-3)。目前我正在为每个标签创建一个新的IPP打印作业 - 但打印之间有几秒钟的延迟。
有没有办法将数量传递给每个作业的IPP以消除延迟?或者可能将多个相同的.pdf传递到一个作业中?
Vars pdf
(生成的标签 - 使用.pdf template),qty
(需要打印的标签数量)和pid
(打印机的打印机ID) print to)传递给下面的代码:
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"在开始处理下一个作业之前 - 从而在作业之间产生延迟。需要将option,waitprinter=false
添加到DeviceURI以绕过等待。
我已尝试将其添加到/etc/cups/printers.conf
中的DeviceURI但无济于事。我已经尝试将其添加到Printer
对象网址中,如:
var printer = ipp.Printer('http://127.0.0.1:631/printers/DYMO_'+pid+'?waitprinter=false');
无法找到打印机的错误。如何在IPP中使用此选项?
更新#2:
出于紧迫感,我使用pdfkit创建了一个解决方案,即时生成多页标签pdf,并将所有家庭标签作为单个打印作业发送。
答案 0 :(得分:0)
您是否尝试将其添加到CUPS主机上的/etc/cups/printers.conf
中的DeviceURI?
如果您是在CUPS运行时通过简单地编辑该文件来实现的,那么它将无效。 通常,printers.conf
不适合直接编辑。它确实在第一行中说明了这一点(尖叫'#不要在CUPSD正在运行时编辑此文件')。
更改打印机配置永久的推荐方法是使用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。)
要暂时更改打印机配置 (仅适用于下一个作业),您可以在发送作业时使用lp
命令传递该选项:
lp -d printername -o waitprinter=false myjob.pdf
转换到您的问题空间,此解决方案意味着:
请勿尝试更改var printer = ipp.Printer ...
声明中的打印机名称。
而是更改operation-attributes-tag并在那里添加'waitprinter': 'false'
语句。