簡體   English   中英

C#代碼128不打印出來

[英]C# Code 128 does not print out

我曾問過的最初問題是在C#中將表單保存到圖像中而沒有抗鋸齒 ,我試圖將Code128打印到打印機。 由於屏幕捕獲會降低打印質量,因此我決定直接編寫代碼以進行打印。 除Code128外,所有圖像和文本均可正確打印

以下是我打印Code128的代碼。 內容已經正確生成。

        SizeF sizeLoginID128 = e.Graphics.MeasureString(this.strUserID128, font1DText);
        e.Graphics.DrawString(this.strUserID128, font1DText, Brushes.Black, fInfoStartX + TEXT_LEFT_MARGIN_OFFSET, fInfoStartY + TEXT_TOP_MARGIN_OFFSET);

該字體可以在FONTS目錄中找到,它是真正的字體。 在GUI設計階段,字體也會正確顯示。 但是,當打印出來時,打印中缺少代碼128。

有誰知道為什么或者我又做錯了嗎

編輯

根據要求,這里是FONT文件夾中字體的屏幕截圖 在此處輸入圖片說明

字體的聲明為

 Font font1DText = new Font("Code 128", 12);

strUserID的內容是ÌMachine8Î

查看有關Code 128的詳盡的Wikipedia文章,您會發現其中確實包含三組字符,分別稱為Code A,B和C。

128A(代碼集A)– ASCII 00-95(0-9,AZ和控制代碼),特殊字符和FNC 1-4

128B(代碼集B)– ASCII 32-127(0-9,AZ,AZ),特殊字符和FNC 1-4

128C(代碼集C)– 00–99(用單個代碼點編碼兩位數字)和FNC1

您要對大小寫混合的字符串進行編碼,因此要使用代碼B。

使用常規的開始代碼B信號:前綴Î (0xCC ascii 204)和作為后綴的常規停止代碼 Ó (0xCE ascii 206):

char StartCodeB = (char)204;
char StopCode   = (char)206;

您可以將編碼后的字符串構建為:

string stringToPrintAsBarCode = StartCodeB + "King Kong" + checkSum +  StopCode;

順便說一句: 我發現某些條形碼字體要比其他條形碼字體更好 ,例如在打印空間時。

還要注意,除了Start&Stop代碼外,code128編碼的字符串還必須包含一個校驗和字符 。如果您遺漏了這三個字符中的任何一個或全部,則無法掃描打印的條形碼!

在您的示例中,“ 8”是校驗和字符。

這是一個用於計算給定文本和給定起始代碼的校驗和的例程:

static char checkSum128(string data, int startcode)
{
    int sum = startcode;
    for (int i = 0; i < data.Length; i++)
    {
        sum += (i + 1) * ((byte)(data[i]) - 32);
    }
    return (char)((sum % 103)+32);
}

這是一個工作例程,它將使用給定的起始代碼字符對給定的文本進行編碼:

string EncodeToCode128(string text, char CodeABC)
{
    char Stop = (char)206;
    char StartCode = CodeABC == 'A' ? (char)203 :
            CodeABC == 'C' ? (char)205 : (char)204; 

    char check = checkSum128(text, (byte)StartCode - 100);

    return StartCode + text  + (char)check + Stop;

}

像這樣使用它:

label_barCodeFont.Text = EncodeToCode128("Hello 2017", 'B');

結果如下:

在此處輸入圖片說明

注意,這非常簡單,並且依賴於所有字符在相同的給定代碼集中。 如果不是這種情況,則必須將其擴展以測試字符,並在另一個代碼集中的代碼(可能是代碼A)之前插入合適的移位代碼

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM