我尝试使用applet“qz-print”从JavaScript打印一些俄语文本。我的js代码:
if (qz !== null) {
qz.append("^XA");
qz.append("^CWX,E:TT0003M_.FNT^FS");
qz.append("^CI29");
qz.append("^LH5, 80");
qz.append("^FO160,220^AUR,5,10^FD" + Черноморец + "^FS");
qz.append("^XZ");
qz.print();
}
在此变体中,我使用zpl编码CI29。但是我的打印机在此代码后离线...帮助只重新启动计算机和打印机。
当我发送下一个代码时 - 一切正常:
qz.append("^XA");
qz.append("^LH5, 80");
qz.append("^FO120,110^ATR,5,10^FD" + Черноморец + "^FS");
qz.print();
但打印机打印奇怪的字符而不是“Черноморец”,类似于KOI8-R。
谁知道怎么用俄语打印?
答案 0 :(得分:1)
请看这个主题: Encoding date in Zebra printer
解决方案是4部分,其中包括:
^CI17
,^CI14
等qz.setEncoding("UTF-16");
,尽管CP-1251 也可以取得成功。 更新:在较新版本的QZ Tray中,语法为qz.configs.create("My Printer", { encoding: 'UTF-8' });
这使得特别困难的是字符翻译和字体可以在不知情的情况下切换三次。
首次编码问题
JavaScript将默认为.js
文件本身的编码(通常为UTF-8,但在许多其他文件中可以是ANSI。Notepad ++将从“编码”菜单选项中显示此内容。)
第二次编码问题
Java将在内部使用UTF-16,但在没有任何警告的情况下,Java将在写入“raw”时进行字符转换,在Windows上将转换为CP-1252,丢弃许多UTF- 16个字符。仅当编码具有可映射的字符时(即CP-1251具有许多可以与Unicode良好映射的西里尔字符),此转换非常好。出于这个原因,qz故意回显日志中有关默认编码的消息,如果在Java控制台中,您应该看到它,一旦激活:
INFO: Current printer charset encoding: windows-1252
第三次编码问题
根据我的经验,大多数打印机都支持西里尔语,但根据打印机的使用年限,可能需要兼容的代码页或上传的字体等,这些都是供应商特有的。在收据打印机的情况下,代码页非常不一致。幸运的是,Zebra为这些问题提供了出色的技术支持和快速周转。
我们如何解决这个问题
对于上面链接的线程,Zebra开发人员(Jason)帮助了打印机部分,QZ开发人员(我自己)帮助了Java部分。杰森直接给我发了电子邮件,以帮助解决这个问题。
我希望这个解释可以帮助你和许多其他人。如果它解决了您的问题,请将此主题标记为已解答,如果您对原始打印有其他疑问,请联系qz社区支持。
-Tres
答案 1 :(得分:0)
我有一本旧书。但启动^ CI29的行可以尝试更改为^ CI17(Unicode)或^ CI14(16位Unicode编码字体)。
您可能还需要使用Zebra网站上的Z-tools获取字体并手动将它们添加到打印机。祝你好运。
答案 2 :(得分:0)
我发现编码CI28。我从JSP发布(<%@ page contentType =“text / html”pageEncoding =“UTF-8”%>)js-code:
qz.append("^XA");
qz.append("^CWX,E:TT0003M_.FNT^FS");
qz.append("^CI28");
qz.append("^FO50,400^AX,80,70^FDCyrillic: ЖЛЗ^FS");
qz.append("^XZ");
qz.print();
但是打印机只打印“Cyrilic:”。有什么问题?求助,谁知道。 当我从文件中打印这个代码时 - 一切都很好,而且从jsp开始 - 不起作用。