POS对于.NET打印格式 - 不能使用转义字符(字符)27(POS for .Net print

2019-07-31 13:41发布

我想通了如何打印基本的文本我们的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

Answer 1:

嗨刚刚发现了这个答案,这为我工作。 试试这个。

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” +“世界你好” - 这将大胆的字符串。



Answer 2:

对我来说,它的工作逃脱这样的字符串:

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

也许你仍然可以使用它的未来。



Answer 3:

从我的测试中,我认为打印机模拟器将不接受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格式化错误。



Answer 4:

我最终确定多少个字符可以每行被打印并创建了一些对准功能。 在这一点上我认为没有什么内置到POS对于.NET。

还是想不通粗体,斜体等格式。



Answer 5:

你检查,如果你的打印机支持粗体,斜体等? 即

if (_printer.CapRecBold)
   // printer supports bold

if (_printer.CapRecItalic)
   // printer supports italic


Answer 6:

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

假设你要打印大胆。

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

而已。



Answer 7:

此字符串为我工作“\ u001B”



文章来源: POS for .Net print formatting - can't use escape character (char)27