2013-04-25 45 views
5
public Bitmap CreateBarcode(string data) 
{ 
    data = "55536"; 
    string barcodeData = "*" + data + "*"; 
    Bitmap barcode = new Bitmap(1, 1); 
    Font threeOfNine = new Font("Free 3 of 9 Extended", 31, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); 

    Font arial = new Font("Arial", 13, 
       System.Drawing.FontStyle.Regular, 
       System.Drawing.GraphicsUnit.Point); 

    Graphics graphics = Graphics.FromImage(barcode); 
    SizeF dataSize = graphics.MeasureString(barcodeData, threeOfNine); 
    dataSize.Height = 70; 

    barcode = new Bitmap(barcode, dataSize.ToSize()); 
    graphics = Graphics.FromImage(barcode); 

    graphics.Clear(Color.White); 
    graphics.TextRenderingHint = TextRenderingHint.SingleBitPerPixel; 

    graphics.DrawString(barcodeData, threeOfNine, new SolidBrush(Color.Black), 0, 0); 

    graphics.DrawString(data, arial, new SolidBrush(Color.Black), 50, 40); 

    graphics.Flush(); 

    threeOfNine.Dispose(); 
    graphics.Dispose(); 

    return barcode; 
} 

我使用上面的代碼生成條形碼,但我的掃描儀無法讀取生成的條形碼(對於55536)。 但是,如果我將數據值切換到「1111」或「2222」,那麼條形碼將被很好地讀取。 所以我認爲這不是一個掃描儀問題,任何人都知道,該代碼有什麼問題? 請指教。使用免費生成條形碼3 of 9字體

+0

你從哪裏得到這個字體? – 2013-04-25 17:09:46

+0

和後續問題,它可以讀取11111?你並不是真的比較蘋果和蘋果,因爲真正的條碼是五位數字,但是測試條碼是四位。 – 2013-04-25 17:16:03

+0

不相關,但您將新的位圖(1,1)分配給條形碼,然後將其設置爲不同的位圖實例。第一個位圖泄漏是因爲你永遠不會處理它。你應該使用帶有一次性對象的using()語句,因爲它將使得一次性對象的範圍更加明顯,並且使得處理處理問題更少。 Arial字體也在泄漏。 – Pete 2013-04-25 17:52:29

回答

3

如果您只使用數字,則可以嘗試9種基本字體中的3種(沒有擴展名)。從寫入打印相同的條形碼並對其進行比較,以查看您的解決方案是在構建完整的條形碼還是正在截斷。

-2

嘗試前綴和後綴:

你爲什麼要通過內

public Bitmap CreateBarcode(string data) 
{ 
    data="55536"; //dont pass the data from here pass it from outside method for eg. call it from the  button click or whatever control you are using. 
} 
+0

不知道這個答案是否與問題相關。 – Rahatur 2014-05-25 14:07:32

0

數據1.如果您正在使用由「*」停止和啓動字符包圍了支持的字符,可能的問題是條形碼的大小或打印的分辨率。 2.確保每個字符的大小是相同的字體大小。混合大小將無法使用。 3.嘗試更改條的顏色時,請記住,顏色越深越好。蠟筆畫不太好。紅色是否定的。 以下是您的參考:asp.net barcode generator using 3 of 9 font