0

基本的なテキストをPOSプリンターに印刷する方法はわかりましたが、エスケープ文字を機能させる方法(太字、テキストの配置など)がわかりません。今のところ、私はMicrosoftPosPrinterSimulatorでテストしています。

これが私が試していることです

_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" +"helloworld"-これは文字列を太字にします。

于 2015-04-22T05:09:26.457 に答える
1

私にとっては、次のように文字列をエスケープするように機能しました。

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

たぶん、あなたはまだそれを将来使用することができます。

于 2012-10-11T10:26:02.987 に答える
1

プリンタが太字、斜体などをサポートしているかどうかを確認しましたか?すなわち

if (_printer.CapRecBold)
   // printer supports bold

if (_printer.CapRecItalic)
   // printer supports italic
于 2013-12-13T01:52:37.473 に答える
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 に答える
0

最終的に、1行に印刷できる文字数を決定し、いくつかの位置合わせ関数を作成しました。現時点では、POSfor.Netには何も組み込まれていないと思います。

それでも、太字や斜体などの書式を理解することはできません。

于 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 に答える