【问题标题】:Send escape character to printer向打印机发送转义字符
【发布时间】:2011-04-01 14:33:25
【问题描述】:

我正在开发一个 C# 应用程序来打印来自 SATO (CG408 TT) 的热转印打印机的标签

为此,我使用 SBPL(SATO 编程语言)。如下所示:

<ESC>A
<ESC>H0050<ESC>V0100<ESC>L0303<ESC>XMSATO
<ESC>H0050<ESC>V0200<ESC>B103100*SATO*
<ESC>H0070<ESC>V0310<ESC>L0101<ESC>XUSATO
<ESC>Q1<ESC>Z

为了与打印机通信并向其发送原始数据,我遵循this 技术。起初我正在尝试使用 StringBuilder 类构建转义序列。

StringBuilder sb = new StringBuilder();
              sb.AppendLine();
              sb.AppendLine("<ESC>A");
              sb.AppendLine("H0050<ESC>V0100<ESC>L0303<ESC>XMSATO");

等等……

但是如何替换字符串生成器参数中的&lt;ESC&gt; 部分。我知道那个字符 27,但是如何将它与 AppendLine 命令一起使用

提前致谢。

【问题讨论】:

    标签: c# .net string printing thermal-printer


    【解决方案1】:
    const char ESC = '\x1B';
    

    现在您可以像使用任何其他变量一样使用 ESC。请注意,您也可以在字符串中嵌入 esc:"\x1B",但我认为这会变得笨拙(尤其是相邻的数字)。

    不要 ESC + "somestring" + ESC 等,因为它违背了 StringBuilder 的目的

    你可以

    StringBuilder sb = new StringBuilder();
              sb.AppendLine();
              sb.AppendLine("<ESC>A");
              sb.AppendLine("H0050<ESC>V0100<ESC>L0303<ESC>XMSATO");
    String output = sb.ToString().Replace("<ESC>", "\x1B")
    

    例如

    【讨论】:

    • 那么我可以做 const char ESC = '\x1F'; sb.AppendLine(ESC+"A");
    • @František Žiačik:谢谢 :)
    • @sehe:您添加到帖子中的内容现在没有意义了 :)
    • @sehe:我看到它没有格式化,现在可以了。顺便说一句,ESC + "somestring" + ESC 可以,编译器会对其进行优化。 StringBuilder 在循环场景中很有用。
    • @sehe: String output = sb.ToString().Replace("", "\x1B") 看起来好多了……!!
    【解决方案2】:

    这应该可以工作

    sb.AppendLine(((char)27).ToString());
    

    【讨论】:

    • 是的,你的方法很完美,但是我在一行中有很多行和很多次 ESC。 @sehe 建议的方法更好吗?我的意思是我可以这样做: const char ESC = '\x1F'; sb.AppendLine(ESC+"A");
    • @Niraj Doshi:可读性更好,不需要强制转换(尽管编译器可能会对此进行优化,但不确定)。
    • 是的,显然你应该创建一个常量,这只是基本的;问题不在于编码实践,而在于如何获得转义字符。从 27 开始转换似乎很有意义,因为您知道字符代码是 27。
    【解决方案3】:

    对于 OPOS 驱动程序,我最终使用了

    string ESC = System.Text.ASCIIEncoding.ASCII.GetString(new byte[] { 27 }); 
    

    【讨论】:

      猜你喜欢
      • 2019-01-27
      • 1970-01-01
      • 2016-04-28
      • 2013-12-30
      • 2014-08-15
      • 2023-03-22
      • 1970-01-01
      • 2011-11-18
      • 2020-04-04
      相关资源
      最近更新 更多