Штрих-код с текстом при использовании ItextSharp

Я использую iTextSharp в своем приложении для создания штрих-кода. Хотя все работает так, как я хотел, мне нужно отобразить значение штрих-кода под штрих-кодом, как показано на прилагаемом изображении. Sample Barcode

Ниже приведен код C#, который я использую:

Barcode39 barcodeImg = new Barcode39();
barcodeImg.Code = barcodeValue.ToString();
barcodeImg.CreateDrawingImage(System.Drawing.Color.Black, System.Drawing.Color.White).Save(stream, ImageFormat.Png);

4 ответов


Это код, который я нашел во время поиска сети. Надеюсь, это решит вашу проблему:

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);            
} 

нет прямого способа отображения текста под изображением штрих-кода с помощью библиотеки dll iTextSharp. Я попробовал то же самое и имел обходной путь для отображения текста. Это не прямое решение, но обеспечит выход, подобный тому, что ожидается из изображения штрих-кода.

чтобы создать изображение штрих-кода, я использовал входные данные, разделяемые JP Hellemons в своем блоге. Спасибо JP Hellemons! http://www.jphellemons.nl/post/Make-a-code128-barcode-with-C-sharp-and-iTextSharp.aspx

код, который я использую:

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);

поправьте меня, если я ошибся..

Если у кого-либо из вас есть прямое или более простое решение, поделитесь ими..


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);

Ах. Вам нужно установить шрифт. Я рекомендую использовать FontFactory.registerDirectories() и FontFactory.getFont( name ).

registerDirectories() перечислит все каталоги ОС, которые, как известно, используются для хранения шрифтов. Windows (любого вкуса) не проблема . Как только это будет сделано, вы можете легко получить шрифты с завода. Все символы штрих-кода, о которых я знаю, не должны иметь проблем с кодировкой по умолчанию, поэтому вам просто нужно попросить базовое имя шрифта, а не знать путь. FontFactory отслеживает весь путь информация для вас. Удобный.