0

Windows Compact Frameworkを使用して、OpenNetCFシリアルポートクラスとCPCLを使用してZebraベルトプリンターに印刷しています。印刷されたラベルはほぼ本来の状態ですが、バーコード値がバーコードの下に印刷されていません。

プリンターに送信するコマンドのArrayListを作成し、それらを一度に1つずつシリアルポートに渡します。値を提供するコントロールが空の場合、次のようなダミーデータを使用します。

    private void btnPrint_Click(object sender, System.EventArgs e)
    {
        string listPrice = txtList.Text;
        if (listPrice.Trim() == string.Empty)
        {
            listPrice = "3.14";
        }
        string description = txtDesc.Text;
        if (description.Trim() == string.Empty)
        {
            description = "The Life of Pi";
        }
        string barcode = txtUPC.Text;
        if (barcode.Trim() == string.Empty)
        {
            barcode = "01701013992";
        }

        ArrayList arrList = new ArrayList();

        arrList.Add("! 0 200 200 120 1\r\n"); // replace 120 with label height if different than 1.25"/120 pixels (at 96 pixels per inch)
        arrList.Add("RIGHT\r\n");
        arrList.Add(string.Format("TEXT 0 5 0 0 {0}\r\n", listPrice)); 
        arrList.Add("LEFT\r\n");
        arrList.Add(string.Format("TEXT 0 0 0 52 {0}\r\n", description)); 
        arrList.Add("CENTER\r\n");
        arrList.Add("BARCODE-TEXT 0 0 5\r\n");
        arrList.Add(string.Format("BARCODE 128 1 1 50 0 77 {0}\r\n", barcode)); 
        arrList.Add("FORM\r\n");
        arrList.Add("PRINT\r\n");

        PrintUtils pu = new PrintUtils();
        pu.PrintLabel(arrList);
    }

    public void PrintLabel(ArrayList linesToSend)
    {
        using (SerialPort serialPort = new SerialPort())
        {
            serialPort.BaudRate = 19200;
            serialPort.Handshake = Handshake.XOnXOff;
            serialPort.DataBits = 8;
            serialPort.Parity = Parity.None;
            serialPort.StopBits = StopBits.One;
            serialPort.PortName = "COM1:";
            serialPort.Open();

            Thread.Sleep(500); //this may not even be necessary and, if so, a different value may be better

                        foreach (string line in linesToSend)
            {
                serialPort.Write(line);
            }

            serialPort.Close();
        }
    }

...問題は、ラベル(ダミーデータの印刷を許可する場合)が次のようになることです。

        3.14
The Life of Pi
    <barcode here>
    01701013992

...そしてこれが実際に印刷しているものです:

        3.14
The Life of Pi
    <barcode here>
    [blank]

したがって、問題は、テキストとしてのバーコード( "01701013992")がバーコードの下に印刷されないことです。

そこにBARCODE-TEXTコマンドがあるのに、なぜこれが発生しているのか、そしてそれを修正する方法を誰かが知っていますか?

アップデート

重要な情報が私の道に来ました。つまり、ラベルの高さ(私の場合)は120ではなく254である必要があります(私の1.25 "の高さのラベルの場合、96ピクセル== 1インチに基づいて計算していましたが、実際にはこれ特定のプリンターは203dpiであるため、1.25 X == 254(より正確には253.75ですが、254は十分に近いです)。

したがって、コードは次のように変更されました。

// Command args (first line, prepended with a "!": horizontal (X) pos, resolution, resolution, label height, copies
// TEXT args are: fontNumber, fontSizeIdentifier, horizontal (X) pos, vertical (Y) pos
// BARCODE args are: barcodeType, unitWidthOfTheNarrowBar, ratioOfTheWideBarToTheNarrowBar, unitHeightOfTheBarCode, 
//      horizontal (X) pos, vertical (Y) pos, barcodeValue
// BARCODE-TEXT args are: fontNumber, fontSizeIdentifier, space between barcode and -text
// 1 inch = 203 dots (Zebra QL220 is a 203 dpi printer); font 4,3 == 90 pixels; font 2,0 == 12 pixels
arrList.Add("! 0 200 200 254 1\r\n"); // 203 dpi X 1.25 = 254
arrList.Add("RIGHT\r\n");
arrList.Add(string.Format("TEXT 4 3 0 0 {0}\r\n", listPrice)); 
arrList.Add("LEFT\r\n");
arrList.Add(string.Format("TEXT 2 0 0 100 {0}\r\n", description)); 
arrList.Add("BARCODE-TEXT 2 0 5\r\n"); 
arrList.Add("CENTER\r\n");
arrList.Add(string.Format("BARCODE 128 1 1 50 0 120 {0}\r\n", barcode)); 
arrList.Add("FORM\r\n");
arrList.Add("PRINT\r\n");

...しかし、「3」と「。」の下にある孤独な「P」を除いて、説明ラベルはまだ表示されていません。価格で。

私の計算は間違っていますか、それとも何ですか?

これが私が持っていると思っていることです:

ラベルの高さは254ドット/1.25インチです。

最初の行はYPos0から始まり、「3.14」を90ピクセルのフォントで右揃えで印刷します。それはうまく印刷されます。

2番目の線はYPos100(90ドットの最初の線の下10ドット)から始まり、左揃えになっています。私が見るのは、適切なサイズのように見える前述の「P」だけです。

3行目は、YPos(120)の中央にあるバーコードです。うまく印刷

4行目/最後の行は、バーコードの下にあるテキストとしてのバーコードで、中央に配置されています。うまく印刷します。

注:これにはまだ賞金をかけることはできませんが、それを解決した人は、できるだけ早く100ポイントを獲得します(2日以内に計算します)。

4

1 に答える 1

2

問題は、12のフォントサイズを取得するためにフォント#2を使用していたことでした(これがそのサイズを提供する唯一のフォントです)。フォント#2の問題は、それが「OCR-A」であり、特定の文字のみを印刷することです。テストとして合格した文字列(「TheLife of Pi」、定価3.14)では、その文字列で認識される文字はPだけです。そのため、私が見たのはこの文字列だけです。

フォント#5(マンハッタン)または7(ワーウィック)を使用して、フォントサイズを次に利用可能な24、つまり24に増やす必要がありました。

zebraの「mk」からこの情報が提供されました(「OCRフォントは、印刷しようとしているすべての文字が含まれていない特別なフォントです。」)。

CPCLプログラミングマニュアルの付録Dを見ると、フォント#2が「OCR-A」であることが示されていますが、それが文字セットによってほとんどのアルファ文字が除外されていることを意味していることに気づきませんでした。一部の人には明らかですが、マニュアルで強調する必要があるように思われます。テキストを印刷するときは、フォント#2を使用しないでください。

注:フォント#6(MICR)もテキストには使用しないでください。

于 2013-02-20T16:53:45.373 に答える