[itextsharp][009]產生barcode, qrcode

[itextsharp][009]產生barcode, qrcode

利用Barcode128物件即可產生barcode條碼,將Barcode128物件轉為iTextSharp.text.Image圖片物件之後,即可直接加入到pdf之中囉:

Document doc = new Document(PageSize.A5);
PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream("BarCodeQRCode.pdf",FileMode.Create));            
doc.Open();
PdfContentByte cb = writer.DirectContent;

Paragraph pa = new Paragraph();            
Barcode128 barcode = new Barcode128();
barcode.CodeType = Barcode.CODE128_UCC;
barcode.Code = "hello barcode";
iTextSharp.text.Image barcodeImage = barcode.CreateImageWithBarcode(cb, null, null);
barcodeImage.ScalePercent(88f);
barcodeImage.Alignment = Element.ALIGN_CENTER;
pa.Add(barcodeImage);

然後要介紹QRCode的產出,由於iTextSharp內建的QRCode類別對於中文內容的支援度較差,需經過幾道override的程序改寫才可存中文,所以在此直接採用第三方元件MessagingToolkit.QRCode。
利用此第三方元件的QRCodeEncoder物件即可產生QRCode的點陣圖Bitmap,再將bitmap轉換成iTextSharp.text.Image即可加入到pdf之中:

QRCodeEncoder chtEncoder = new QRCodeEncoder();
//第三方先產生bitmap
Bitmap qrBitmap1 = chtEncoder.Encode("qrcode裝中文內容"); //將內容轉碼成 QR code            
//再將bitmap轉換成iTextSharp.text.Image
iTextSharp.text.Image qrImage1 = iTextSharp.text.Image.GetInstance(qrBitmap1, BaseColor.BLACK);
qrImage1.ScalePercent(50);
qrImage1.Alignment = Element.ALIGN_RIGHT;//透過Image.Alignment來設定靠左靠右
pa.Add(qrImage1);

doc.Add(pa);
doc.Close();

產出的pdf:

完整程式碼:

Document doc = new Document(PageSize.A5);
PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream("BarCodeQRCode.pdf",FileMode.Create));            
doc.Open();
PdfContentByte cb = writer.DirectContent;

Paragraph pa = new Paragraph();            
Barcode128 barcode = new Barcode128();
barcode.CodeType = Barcode.CODE128_UCC;
barcode.Code = "hello barcode";
iTextSharp.text.Image barcodeImage = barcode.CreateImageWithBarcode(cb, null, null);
barcodeImage.ScalePercent(88f);
barcodeImage.Alignment = Element.ALIGN_CENTER;
pa.Add(barcodeImage);


QRCodeEncoder chtEncoder = new QRCodeEncoder();
//第三方先產生bitmap
Bitmap qrBitmap1 = chtEncoder.Encode("qrcode裝中文內容"); //將內容轉碼成 QR code            
//再將bitmap轉換成iTextSharp.text.Image
iTextSharp.text.Image qrImage1 = iTextSharp.text.Image.GetInstance(qrBitmap1, BaseColor.BLACK);
qrImage1.ScalePercent(50);
qrImage1.Alignment = Element.ALIGN_RIGHT;//透過Image.Alignment來設定靠左靠右
pa.Add(qrImage1);

doc.Add(pa);
doc.Close();

本文使用iTextSharp版本:5.5.8。

iTextSharp 4.1.6測試結果:
實測結果,需要將version 5.5.8的:
iTextSharp.text.Image qrImage1 = iTextSharp.text.Image.GetInstance(qrBitmap1, BaseColor.BLACK);
改成這樣:
iTextSharp.text.Image qrImage1 = iTextSharp.text.Image.GetInstance(qrBitmap1,iTextSharp.text.Color.BLACK);
而且實測結果,version4.1.6的barcode用手機比較難掃描,需要多掃描幾次,version 5.5.8的很容易掃描成功,大概是較新版本的圖形縮放的演算法有修改因此比較不會失真。
這篇大概是這樣。。。

參考資料:
Qr Code library 1.3.0
[ASP.NET] 產出 QRcode - 網頁版 - MessagingToolkit.QRCode 版