JavaScript:将原始文本发送到打印机 - 无服务器请求/方法调用,能够离线工作,纯客户端

标签 javascript html printing zpl

我对网络的深入研究为我提供了一些想法,但它们似乎都不适用于我的特定用例。这是我所拥有的:

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

关于 jsfiddle 的示例或 gist.run

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();
}

测试于

  • 边缘
  • 互联网浏览器
  • 火狐

不适用于:


在您的打印机属性中选择通用/纯文本驱动程序:

Zebra printer - Generic / Text Only driver

关于JavaScript:将原始文本发送到打印机 - 无服务器请求/方法调用,能够离线工作,纯客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36570689/

相关文章:

javascript - 日期倒计时不正确

本月之前的 Javascript getDate()

C - 从文件中读取字符串。获取随机字符

batch-file - Windows 10 从命令行打印为 PDF

javascript - 从获取返回值更新 vuejs 警报组件

javascript - 如何设置文本区域中文本的格式或样式?

javascript - Jquery 的行为不符合预期

javascript - 使段落 Prop 中的某些文本在 react 中加粗的最佳方法是什么?

javascript - 需要从json数据中填写表单数据。没有出现

Java:如何检查打印机状态