我对网络的深入研究为我提供了一些想法,但它们似乎都不适用于我的特定用例。这是我所拥有的:
1) Zebra打印机,使用ZPL作为打印语言;
2) javascript 中的一个字符串,由 3 个 ZPL 表单组成,用于打印 3 个标签。
我们的系统工程师已经验证过,ZPL语法是完全正确的。 我想要实现的是将字符串作为纯文本发送给打印机,以接受它作为 ZPL 指令来打印标签。 到目前为止我想出的最好的看起来像这样:
var mywindow = window.open('', 'Printing', 'width=800,height=600');
//mywindow.write("testDirectWrite"); // not working
mywindow.document.open('text/plain');
////mywindow.document.write('<html><head><title>Printing</title><meta charset="ISO-8859-1">');
///*optional stylesheet*/ //mywindow.document.write('<link rel="stylesheet" href="main.css" type="text/css" />');
////mywindow.document.write('</head><body>');
var theDiv = $(".test-printirane-po-usb");
var printContents = theDiv[0].innerText;
mywindow.document.write(printContents);
////mywindow.document.write('</body></html>');
//mywindow.document.close(); // necessary for IE >= 10
//mywindow.focus(); // necessary for IE >= 10
//mywindow.print();
//mywindow.close();
现在(测试目的),theDiv 是我放置 ZPL 字符串的容器。基本上,我明白,最好的解决方案是打开一个新的弹出窗口,用 ZPL 字符串填充它并调用 thePopupWindow.print();然后用户选择 Zebra 打印机并点击“打印”。 问题:打印机似乎将正在打印的内容解释为 html 页面(因为
<html><head></head><body>theZPLString comes here</body></html>
标签,例如,当我检查 Chrome 中的弹出窗口时)并将 ZPL 代码打印为纯文本,而不是解释它并打印标签。我想我需要像 thePopupWindow.write() 这样的东西来避免写入窗口的文档属性,这显然将字符串包装在 html 代码中。 为了测试它,我使用通用/纯文本驱动程序并将“打印”的内容保存到 .txt 文件中。
在 Chrome 中我得到一个空文件。
在 Mozilla 中,当我删除此行时:mywindow.document.open('text/plain');我将 ZPL 作为字符获取,每行一个。当我添加它时,我只得到一个日期和时间,每行一个字符。
在 IE 中——我得到这个(有或没有 mywindow.document.open('text/plain');):
Page 1 o
^XA^PW400^LL37^
12.4.2016
我找到了各种解决方案,但它们涉及使用 php、c#,甚至 java,我不希望它是服务器端的,如标题中所述。 任何帮助将不胜感激。 @forgivenson,谢谢你的观点。看完你的后,我看到了小“x”,我可以点击它来删除我的评论,所以我在问题中添加了评论。 我错过了一些非常重要的事情:打印机是通过 USB 端口连接的!
最佳答案
当打印到 Zebra 打印机时,^XA
之前和 ^XZ
之后的所有内容都将被忽略。 zpl 周围的 html 标签不会干扰。
您唯一必须确保将 RAW 文本打印到打印机。
使用适用于 Zebra 打印机的 Windows 通用/纯文本
驱动程序。而不是斑马驱动程序。
- 普通的 zebra 驱动程序:将打印作业呈现为位图
- 结果:一张缓慢打印的 zpl 代码图像。
- 纯文本驱动程序:将 zpl 代码直接发送到打印机
- 结果:一张快速打印的贴纸,来自打印机上渲染的 zpl
function printZpl(zpl) {
var printWindow = window.open();
printWindow.document.open('text/plain')
printWindow.document.write(zpl);
printWindow.document.close();
printWindow.focus();
printWindow.print();
printWindow.close();
}
测试于
- 边缘
- 互联网浏览器
- 火狐
不适用于:
- Chrome
- Chrome 在将图像发送到打印机驱动程序之前创建图像 (https://productforums.google.com/forum/#!topic/chrome/GYf6iI42Ug4)
在您的打印机属性中选择通用/纯文本驱动程序:
关于JavaScript:将原始文本发送到打印机 - 无服务器请求/方法调用,能够离线工作,纯客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36570689/