[英]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 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.