これは、MotorolaMC3100ハンドヘルドで実行されているCE/CFアプリからZebraQL220ベルトプリンターで印刷されます(まだ醜いですが)。
public void PrintBarcode(string barcode, string UPC, string description, decimal listPrice)
{
using (SerialPort serialPort = new SerialPort())
{
serialPort.BaudRate = 19200;
serialPort.Handshake = Handshake.XOnXOff;
serialPort.DataBits = 8;
serialPort.Parity = Parity.None;
serialPort.StopBits = StopBits.One; // other choice is Two (see p. 14-21 in CPCL pdf)
serialPort.PortName = "COM1:";
serialPort.Open();
Thread.Sleep(2500); // I don't know why this is needed, or if it really is...
serialPort.Write("! 0 200 200 210 1\r\n");
serialPort.Write("TEXT 4 0 30 40 Hola el Mundo\r\n"); //Bonjour le Monde --- Hola el Mundo --- Hallo die Welt
serialPort.Write("TEXT 4 0 30 40 \r\n");
serialPort.Write("BARCODE-TEXT 7 0 5\r\n");
serialPort.Write(string.Format("BARCODE 128 1 1 50 150 10 {0}\r\n", barcode));
serialPort.Write("TEXT 4 0 30 40\r\n");
serialPort.Write("FORM\r\n");
serialPort.Write("PRINT\r\n");
serialPort.Close();
}
}
...しかし、モッシュピットにいる半躁病の10代の若者のように、最後に印刷されたバーコードは実際には紙の最高点にあり、「HolaelMundo」と「FOIPM」のように見えます(どのようにそこに着く?!?)も。
CRLFを送信する方法ではない場合"TEXT 4 0 30 40\r\n"
、何ですか?
アップデート
バーコードを印刷するために引数にタイプミスがあることに気づきました。これ:
serialPort.Write(string.Format("BARCODE 128 1 1 50 150 10 {0}\r\n", barcode));
...これはこれであるはずです:
serialPort.Write(string.Format("BARCODE 128 1 1 50 150 130 {0}\r\n", barcode));
...しかし、それを「修正」したとき(垂直方向の開始点を10から130に変更したとき)、印刷された結果は同じでした!フランス語すみませんが、ノースダコタ州はここで何をしているのですか?!?
更新2
気にしないでください。適切な場所に修正を追加すると、実際に機能します(「10」を「130」に変更)。今、私はそれを「スマート」にする必要があります。それは、前の印刷領域を考慮に入れ、常に開始点+前の印刷の高さより下の後続の行を印刷するという点です。