c# - 如何在 Zebra 打印机上使用 windows-1250 代码页进行打印?

标签 c# utf-8 zebra-printers zpl epl

我有使用 Zebra 打印机(具体为 RW 420)进行打印的代码

StringBuilder sb = new StringBuilder();            
sb.AppendLine("N");            
sb.AppendLine("q609");
sb.AppendLine("Q203,26");
//set printer character set to win-1250
sb.AppendLine("I8,B,001");
sb.AppendLine("A50,50,0,2,1,1,N,\"zażółć gęślą jaźń\"");
sb.AppendLine("P1");

printDialog1.PrinterSettings = new System.Drawing.Printing.PrinterSettings();
if (printDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
    byte[] bytes = Encoding.Unicode.GetBytes(sw.ToString());
    bytes = Encoding.Convert(Encoding.Unicode, Encoding.GetEncoding(1250), bytes);                
    int bCount = bytes.Length;
    IntPtr ptr = System.Runtime.InteropServices.Marshal.AllocCoTaskMem(bCount);
    System.Runtime.InteropServices.Marshal.Copy(bytes, 0, ptr, bytes.Length);
    Common.RawPrinterHelper.SendBytesToPrinter(printDialog1.PrinterSettings.PrinterName, ptr, bCount);
}

RawPrinterHelper 是我从 here 获得的 Microsoft 类.

我的问题是只有 ASCII 字符是这样打印的:

za     g  l  ja  

非 ASCII 字符丢失。

有趣的是,当我打开记事本并将相同的文本放入其中并在 Zebra 打印机上打印时,所有字符都正常。

最佳答案

区别在于记事本使用的是打印机驱动程序,你绕过了它。 Zebra 打印机对使用其内置字体有一些支持。它有代码页 950 的字符集和它称为“Latin 1”和“Latin 9”的东西。关键问题是它们都不包含您需要的字形。打印机驱动程序通过向打印机发送图形而不是字符串来解决这个问题。编程手册is here顺便说一句。

我想这些打印机有某种选择来安装额外的字体,如果不是这样的话,很难在世界其他地方销售。请联系您友好的打印机供应商以获取支持和选项。

关于c# - 如何在 Zebra 打印机上使用 windows-1250 代码页进行打印?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4669965/

相关文章:

c# - 将进程的工作目录设置为 exe 的路径?

C# 通过注册表获取 Windows 驱动器硬件标题

javascript - 土耳其字符串的子字符串

Python从MySQL中由Latin1_swedish_ci编码的数据库检索数据

printing - 将原始数据发送到 FedEx 标签打印机

c# - 按不同日期排序时选择要列出的值()

c# - 如何以编程方式切换样式表?

c++ - UTF-8 符号写入终端输出

javascript - 使用适用于 Zebra 打印机的 PHP 或 Javascript 将 RGB 图像转换为 Floyd-Steinberg 图像

java - 如何使用带有 EPL 的 Zebra 打印机打印双引号?