2012-02-10 133 views
0

我需要一個免費 C#庫允許創建PDF-417條形碼。然而,我遇到的所有網站都是商業產品。你能推薦一個免費的圖書館嗎?哪個免費的C#庫可以生成PDF-417條形碼?

+1

谷歌打開了這個SourceForge的打擊:http://sourceforge.net/projects/pdf417lib/files/pdf417lib/0.91/Pdf417lib-csharp-0.91.zip/download – millimoose 2012-02-10 22:31:51

+0

謝謝,這可能工作。 – 2012-02-11 09:33:15

+0

實際上我在使用上述庫時遇到了一些麻煩,因爲沒有有用的示例或文檔。有沒有人成功使用過這個庫? – 2012-02-14 19:28:38

回答

-1

您可以使用SharpPDF417 nuget包。它是完全免費的。但是,我們需要編寫一點包裝代碼來獲取生成的字節[]或條形碼流。

private byte[] GenerateBarCode(string data) 
{ 
    Pdf417Generator gen = new Pdf417Generator(data); 
    int bw = 2; 
    int bh = 2; 
    var barcode = gen.Encode(); 
    var width = barcode.Columns * bh; 
    var height = barcode.Rows * bh; 
    Byte[] imgData; 
    using (MemoryStream stream = new MemoryStream()) 
    { 
     using (System.Drawing.Image bmp = new Bitmap(width, height)) 
     { 
      using (Graphics graphics = Graphics.FromImage(bmp)) 
      { 


       int y = 0; 
       for (int r = 0; r < barcode.Rows; ++r) 
       { 
        int x = 0; 
        for (int c = 0; c < barcode.Columns; ++c) 
        { 
         if (barcode.RawData[r][c] == 1) 
         { 
          graphics.FillRectangle(Brushes.Black, x, y, bw, bh); 
         } 
         x += bw; 
        } 
        y += bh; 
       } 
      } 
      bmp.Save(stream, ImageFormat.Png); 
     } 

     imgData = stream.ToArray(); 
    } 
    return imgData; 
} 

您可以使用我的上述方法來獲取生成的條碼的字節數組。

+0

這不起作用。它產生的條形碼看起來很好,但我無法用我的手機,在線條形碼識別器或摩托羅拉掃描儀讀取它。 ZXing.net包我可以讀,但我有一個噩夢得到的縱橫比正確 – 2017-08-09 01:07:27

+0

同上,生成它與級別0(不可掃描),級別4(文本被複制)和級別8(文本被截斷) 。如果要將生成的條形碼與其中一個在線掃描儀進行比較,則不會生成有效的pdf417條形碼。 – user1361991 2017-11-21 23:17:32

3

您還可以使用ZXing.net nuget包,這將更加簡單和易於使用。

private byte[] GenerateBarCodeZXing(string data) 
{ 
    var writer = new BarcodeWriter 
    { 
     Format = BarcodeFormat.PDF_417, 
     Options = new EncodingOptions { Width = 200, Height = 50 } //optional 
    }; 
    var imgBitmap = writer.Write(data); 
    using (var stream = new MemoryStream()) 
    { 
     imgBitmap.Save(stream, ImageFormat.Png); 
     return stream.ToArray(); 
    } 
}