.net
c#
ゼブラ プリンター ( TTP2030
) でテキストとバーコードを印刷する必要があるWeb アプリを使用しています。ここからRawPrinterHelper
クラスを使用します。Unicode 文字列として、プリンターへのコマンドをほぼ取得しました。
したがって、バーコードを印刷するには、次のようにします。
string enq = Convert.ToChar(5).ToString();
string esc = Convert.ToChar(27).ToString();
string nul = Convert.ToChar(0).ToString();
string rs = Convert.ToChar(30).ToString();
string lf = Convert.ToChar(10).ToString();
string cr = Convert.ToChar(13).ToString();
StringBuilder sb = new StringBuilder();
sb.Append(esc + "BS" + nul + nul + Convert.ToChar(72).ToString() + nul + nul);
sb.Append(nul + nul + Convert.ToChar(64).ToString() + nul + Convert.ToChar(2).ToString() + Convert.ToChar(2).ToString());
sb.Append(esc + "BW" + nul + "733104000099" + nul);
sb.Append(lf + rs);
RawPrinterHelper.SendStringToPrinter(printerName, sb.ToString());
そのコマンドのニーモニックは
< ESC>BS<0><0>< h 48><0><0>
<00><0>< h 40><0><2><2>
< ESC>BW<00>733104000099<00>
< LF>< RS>
< h 48> のようなものを正しく送信しているかどうかはわかりません。マニュアルによると、先頭h
にスペースが続く場合は 16 進値を示します。この場合、値X
はバーコードの座標 (下位バイト - これが何かはわかりません) を表します。
この値がピクセル (または mm) 単位の場合、16 進数に変換してからプリンターに送信する Unicode に変換するにはどうすればよいですか?
また、送信する必要がある 10 進値を変換するにはどうすればよいですか?
たとえば、私が送信するルーラーラインを印刷するには:
< ESC>r<0><0><0><0><1><230><0><24><3>
すべて 10 進数で、位置、開始、停止などを意味します。
このコマンドをプリンタに送信できるように変換するにはどうすればよいですか?
仕事に取り組めないもう 1 つのことは、プリンターからデータを取得することです。用紙の状態、シリアル番号、ファームウェアなどを取得するなど、いくつかのコマンドを使用できます。最初にこれを達成するために、追加しました
[DllImport("winspool.drv", CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
public static extern int ReadPrinter(IntPtr hPrinter, StringBuilder data, int buf, out int pcRead);
RawPrinterHelper
クラスで。次に、ゼブラのウェブサイトから入手したという小さなアプリから保存しSendFileToPrinter
たファイルを使用してコマンドを送信しようとしました.prn
kiosk printer toolbox
(上記のアプローチではなくファイルを送信することにしましたSendStringToPrinter
。なぜなら、そこで正しいことをしているとは思えないからです。また、いくつかの異なるコマンドを使用してコマンド ファイルをプリンターに送信することをテストしたところ、うまくいきました。 )。
次に呼び出されReadPrinter(hPrinter, sb, 6, out dwWritten);
ますが、sb
空です。メソッドは0を返します。プリンターからデータを読み取る方法を知っている人はいますか? 印刷 (テキストとバーコード) とプリンターの状態を取得するために考慮すべきまったく異なるアプローチはありますか?