0

我想出了如何将基本文本打印到我们的 POS 打印机,但我不知道如何让转义字符起作用(用于粗体、文本对齐等)。现在我只是在使用 Microsoft PosPrinter Simulator 进行测试。

这就是我正在尝试的

_printer.PrintNormal(PrinterStation.Receipt, (char)27 + "|bC" + printText + (char)13 + (char)10);

我希望printText以粗体打印我的内容,然后是换行符。当我取出时,(char)27 + "|bC"它工作正常。

转义码的文档在这里

我得到的错误是

Microsoft.PointOfService.ControlBase.dll 中出现“System.FormatException”类型的第一次机会异常输入字符串的格式不正确。

我尝试了一堆变体,但似乎无法理解它。

编辑. 这是堆栈跟踪..

   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
4

7 回答 7

3

嗨,刚刚发现了这个答案,这对我有用。试试这个。

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

然后以您的格式或文本使用它,如下所示:

ESC + "|cA" - 用于中心。ESC + "|bC" -- 粗体。

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

于 2015-04-22T05:09:26.457 回答
1

根据我的测试,我认为打印机模拟器不会接受 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 格式。

于 2014-05-15T15:58:40.840 回答
1

您是否检查过您的打印机是否支持粗体、斜体等?IE

if (_printer.CapRecBold)
   // printer supports bold

if (_printer.CapRecItalic)
   // printer supports italic
于 2013-12-13T01:52:37.473 回答
1

对我来说,它可以像这样逃避字符串:

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

也许您将来仍然可以使用它。

于 2012-10-11T10:26:02.987 回答
0

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

仍然无法弄清楚粗体,斜体等格式。

于 2012-09-18T18:01:36.150 回答
0

Androidz的答案是正确的。你也可以做一些像下面这样的事情。

假设您要打印粗体。

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

而已。

于 2018-05-29T05:43:07.147 回答
0

这个字符串对我有用“\u001B”

于 2018-08-15T13:01:47.903 回答