C# POS用于.Net打印格式-can';t使用转义字符(char)27

C# POS用于.Net打印格式-can';t使用转义字符(char)27,c#,printing,ascii,pos-for-.net,C#,Printing,Ascii,Pos For .net,我知道如何将基本文本打印到POS打印机上,但我不知道如何让转义字符工作(用于粗体、文本对齐等)。现在我只是用微软的PosPrinter模拟器进行测试 这就是我要尝试的 _printer.PrintNormal(PrinterStation.Receipt, (char)27 + "|bC" + printText + (char)13 + (char)10); 我希望我的printText以粗体打印,然后换行。当我取出(char)27+“|bC”时,它工作正常 我得到的错误是 中发生了类型为

我知道如何将基本文本打印到POS打印机上,但我不知道如何让转义字符工作(用于粗体、文本对齐等)。现在我只是用微软的PosPrinter模拟器进行测试

这就是我要尝试的

_printer.PrintNormal(PrinterStation.Receipt, (char)27 + "|bC" + printText + (char)13 + (char)10);
我希望我的
printText
以粗体打印,然后换行。当我取出
(char)27+“|bC”
时,它工作正常

我得到的错误是

中发生了类型为“System.FormatException”的首次意外异常 Microsoft.PointOfService.ControlBase.dll输入字符串不在 格式正确

我尝试了一系列的变化,但似乎无法使我的头围绕它

编辑。这是堆栈跟踪

   at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
   at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
   at System.Int32.Parse(String s, IFormatProvider provider)
   at Microsoft.PointOfService.DeviceSimulators.PosPrinterSimulatorWindow.ProcessEscapes(String str)
   at Microsoft.PointOfService.DeviceSimulators.PosPrinterSimulatorWindow.DisplayText(String str)
   at Microsoft.PointOfService.DeviceSimulators.PosPrinterSimulator.PrintNormalImpl(PrinterStation station, PrinterState printerState, String data)
   at Microsoft.PointOfService.BaseServiceObjects.PosPrinterBase.OutputRequestHandler(OutputRequest Request)
   at Microsoft.PointOfService.Internal.PosCommonInternal.ProcessOutputRequest(OutputRequest request, Boolean asyncOperation)
   at Microsoft.PointOfService.BaseServiceObjects.PosPrinterBase.ProcessRequest(PrintOperation operation)
   at Microsoft.PointOfService.BaseServiceObjects.PosPrinterBase.PrintNormal(PrinterStation station, String data)
   at MyProjectNamespace) in MyFile.cs:line 74

我最终决定了每行可以打印多少个字符,并创建了一些对齐函数。在这一点上,我认为POS for.Net没有内置任何东西


仍然无法确定粗体、斜体等格式。

我最终确定了每行可以打印多少个字符,并创建了一些对齐函数。在这一点上,我认为POS for.Net没有内置任何东西


仍然无法理解粗体、斜体等格式。

对我来说,它可以像这样转义字符串:

_printer.PrintNormal(PrinterStation.Receipt, "\x1B|bCYour Bold line\r\n");

也许你以后还可以使用它。

对我来说,它可以像这样对字符串进行转义:

_printer.PrintNormal(PrinterStation.Receipt, "\x1B|bCYour Bold line\r\n");

也许你以后还可以使用它。

你检查过你的打印机是否支持粗体、斜体等吗?i、 e

if (_printer.CapRecBold)
   // printer supports bold

if (_printer.CapRecItalic)
   // printer supports italic

您是否检查了打印机是否支持粗体、斜体等?i、 e

if (_printer.CapRecBold)
   // printer supports bold

if (_printer.CapRecItalic)
   // printer supports italic

根据我的测试,我认为打印机模拟器不会接受ESC字符

我使用大量常量替换创建要发送到打印机的文本,如:

      string escAlignCenter = String.Format("{0}|cA", ((char)27));
      string escAlignRight = String.Format("{0}|rA", ((char)27));
      string escBoldOn = String.Format("{0}|bC", ((char)27));
      string escNewLine = String.Format("{0}|1lF", ((char)27));
      string escPaperCut = String.Format("{0}|75P", ((char)27));
      string escReset = String.Format("{0}|N", ((char)27));
      string escUnderlineOn = String.Format("{0}|uC", ((char)27));
因此,我可能会将以下内容发送到打印机:

String.Format("{0}Hellow world!", escAlignCenter)"
为了避免在使用打印机模拟器时出错,我需要执行以下操作

      if(useSimulator)
      {
        string xxx = String.Format("{0}", ((char)27));
        string testString = testPrint.ToString();
        testString = testString.Replace(xxx, "\\");
        logger.Debug("text to print is [{0}]", testString);
        posPrinter.PrintNormal(PrinterStation.Receipt, testString); 
      }
      else
        posPrinter.PrintNormal(PrinterStation.Receipt, testPrint.ToString());

这将删除错误,但是打印到模拟器的文本包含所有ESC格式。

根据我的测试,我认为打印机模拟器不会接受ESC字符

我使用大量常量替换创建要发送到打印机的文本,如:

      string escAlignCenter = String.Format("{0}|cA", ((char)27));
      string escAlignRight = String.Format("{0}|rA", ((char)27));
      string escBoldOn = String.Format("{0}|bC", ((char)27));
      string escNewLine = String.Format("{0}|1lF", ((char)27));
      string escPaperCut = String.Format("{0}|75P", ((char)27));
      string escReset = String.Format("{0}|N", ((char)27));
      string escUnderlineOn = String.Format("{0}|uC", ((char)27));
因此,我可能会将以下内容发送到打印机:

String.Format("{0}Hellow world!", escAlignCenter)"
为了避免在使用打印机模拟器时出错,我需要执行以下操作

      if(useSimulator)
      {
        string xxx = String.Format("{0}", ((char)27));
        string testString = testPrint.ToString();
        testString = testString.Replace(xxx, "\\");
        logger.Debug("text to print is [{0}]", testString);
        posPrinter.PrintNormal(PrinterStation.Receipt, testString); 
      }
      else
        posPrinter.PrintNormal(PrinterStation.Receipt, testPrint.ToString());

这消除了错误,但是打印到模拟器上的文本包含了所有ESC格式。

Hi刚刚找到了这个答案,这对我很有用。试试这个

string Bold = System.Text.ASCIIEncoding.ASCII.GetString(new byte[] { 27, (byte)'|', (byte)'b', (byte)'C' });
或者您可以简单地声明:

 string ESC = System.Text.ASCIIEncoding.ASCII.GetString(new byte[] {27});
然后在您的格式或文本中使用它,如下所示:

_printer.PrintNormal(PrinterStation.Receipt, "\x1B|bCYour Bold line\r\n");
ESC+“| cA”-这是用于中心的。 ESC+“| bC”-表示粗体


ESC+“| bC”+“hello world”-这将使字符串加粗。

Hi刚刚找到了这个答案,这对我很有用。试试这个

string Bold = System.Text.ASCIIEncoding.ASCII.GetString(new byte[] { 27, (byte)'|', (byte)'b', (byte)'C' });
或者您可以简单地声明:

 string ESC = System.Text.ASCIIEncoding.ASCII.GetString(new byte[] {27});
然后在您的格式或文本中使用它,如下所示:

_printer.PrintNormal(PrinterStation.Receipt, "\x1B|bCYour Bold line\r\n");
ESC+“| cA”-这是用于中心的。 ESC+“| bC”-表示粗体


ESC+“| bC”+“hello world”-这将使字符串加粗。

Androidz的答案是正确的。你也可以做下面的事情

假设您要打印粗体

string text = "ESC|bC" + "BOLD Text";
// Now replace ESC as below.
string textToPrint = text.Replace("ESC", ((char)27).ToString());

就是这样。

安德烈兹的回答是正确的。你也可以做下面的事情

假设您要打印粗体

string text = "ESC|bC" + "BOLD Text";
// Now replace ESC as below.
string textToPrint = text.Replace("ESC", ((char)27).ToString());

就是这样。

这个字符串对我有用

这个字符串对我有用

printText的价值是什么?@Prescott-“我们公司”。。。这个字符串没什么特别的。你可以试着用“Convert.ToChar(27)”代替(char)27。我不熟悉,只是在阅读文档,似乎以转义码结尾的字符串必须以大写字母“转义序列被大写字母字符停止”开头。只是想确保这是case@habakuk与Convert.ToChar(27)一起没有运气。我可能只需要在我的行中填充空格,就可以将它们放在我想要的地方:/printText的价值是什么?@Prescott-“我们公司”。。。这个字符串没什么特别的。你可以试着用“Convert.ToChar(27)”代替(char)27。我不熟悉,只是在阅读文档,似乎以转义码结尾的字符串必须以大写字母“转义序列被大写字母字符停止”开头。只是想确保这是case@habakuk与Convert.ToChar(27)一起没有运气。我可能只需要在我的行中填充空格,就可以将它们放到我想要的地方:/我也做了同样的事情,因为我厌倦了让它工作。我也做了同样的事情,因为我厌倦了让它工作。自从我发布了这个问题,我换了工作,所以我没有机会测试它,但是我会把它标记为答案你如何撤销[禁用]粗体打印非粗体的内容?自从我发布这个问题以来我换了工作,所以我没有机会测试它,但我会把它标记为答案你如何撤销[禁用]粗体打印非粗体的内容?