Barcode with Text Under using ItextSharp
I am using iTextSharp in my application to generate a barcode. Though开发者_如何学C everything is working as I wanted, I need to display the value of the barcode under the barcode like the one showin in the attached image.
Below is the C# code I use:
Barcode39 barcodeImg = new Barcode39();
barcodeImg.Code = barcodeValue.ToString();
barcodeImg.CreateDrawingImage(System.Drawing.Color.Black, System.Drawing.Color.White).Save(stream, ImageFormat.Png);
This is code I found while searching the net. Hope this solves your problem:
string prodCode = context.Request.QueryString.Get("code");
context.Response.ContentType = "image/gif";
if (prodCode.Length > 0)
{
Barcode128 code128 = new Barcode128();
code128.CodeType = Barcode.CODE128;
code128.ChecksumText = true;
code128.GenerateChecksum = true;
code128.StartStopText = true;
code128.Code = prodCode;
System.Drawing.Bitmap bm = new System.Drawing.Bitmap(code128.CreateDrawingImage(System.Drawing.Color.Black, System.Drawing.Color.White));
bm.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Gif);
}
There is no direct way to display text below the barcode image using iTextSharp dll. I tried the same and had a workaround to display the text. This is not a direct solution, but will provide output similar to what is expected out of a barcode image.
To generate the barcode image, i used the inputs shared by JP Hellemons in his blog. Thanks JP Hellemons! http://www.jphellemons.nl/post/Make-a-code128-barcode-with-C-sharp-and-iTextSharp.aspx
The code that i used:
Barcode128 code128 = new Barcode128();
code128.CodeType = iTextSharp.text.pdf.Barcode.CODE128;
code128.ChecksumText = true;
code128.GenerateChecksum = true;
code128.StartStopText = false;
code128.Code = <<Barcode value>>;
// Create a blank image
System.Drawing.Bitmap bmpimg = new Bitmap(120,35); // provide width and height based on the barcode image to be generated. harcoded for sample purpose
Graphics bmpgraphics = Graphics.FromImage(bmpimg);
bmpgraphics.Clear(Color.White); // Provide this, else the background will be black by default
// generate the code128 barcode
bmpgraphics.DrawImage(code128.CreateDrawingImage(System.Drawing.Color.Black, System.Drawing.Color.White), new Point(0, 0));
//generate the text below the barcode image. If you want the placement to be dynamic, calculate the point based on size of the image
bmpgraphics.DrawString(<<Barcode value>>, new System.Drawing.Font("Arial", 8, FontStyle.Regular), SystemBrushes.WindowText, new Point(15, 24));
// Save the output stream as gif. You can also save it to external file
bmpimg.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Gif);
Correct me if I was wrong..
If any of you have a direct or simpler solution, please share them..
iTextSharp.text.pdf.Barcode128 bc = new Barcode128();
bc.TextAlignment = Element.ALIGN_CENTER;
bc.Code = "anything";
bc.StartStopText = false;
bc.CodeType = iTextSharp.text.pdf.Barcode128.CODE128;
bc.Extended = true;
//bc.Font = null;
iTextSharp.text.Image PatImage1 = bc.CreateImageWithBarcode(cb, iTextSharp.text.BaseColor.BLACK, iTextSharp.text.BaseColor.BLACK);
PatImage1.ScaleToFit(160, 20);
PdfPTable p_detail1 = new PdfPTable(1);
p_detail1.WidthPercentage = 100;
PdfPCell barcideimage = new PdfPCell(PatImage1);
//barcideimage.Colspan = 2;
barcideimage.HorizontalAlignment = 2;
barcideimage.Border = 0;
p_detail1.AddCell(barcideimage);
l1.Add(p_detail1);
Ah. You need to set the font. I recommend using FontFactory.registerDirectories()
and FontFactory.getFont( name )
.
registerDirectories()
will enumerate all the directories OSes are known to use to store fonts. Windows (of whatever flavor) is no problem . Once that's done, you can easily get fonts from the factory. All the barcode symbologies I'm aware of should have no problem with the default encoding, so you really just need to ask for a basic font name rather than knowing a path. FontFactory tracks all the path info for you. Handy.
code128.Size=10;
code128.Baseline = code128.Size;
EAN13
精彩评论