2011-02-07 2 views
7

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

Ниже приведен код # C Я использую:

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

Может ли [это] (http://stackoverflow.com/questions/3215522/itextsharp-adding-text-plus-barcode-in-a-single-cell) помочь? –

ответ

6

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

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

Извините, текст по-прежнему не отображается под штрих-кодом. Спасибо, что пытались помочь. – acadia

+4

Lol! этот сниппет выглядит так же, как в моем блоге! http://www.jphellemons.nl/post/Make-a-code128-barcode-with-C-sharp-and-iTextSharp.aspx –

0

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

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

+0

Отметьте его не шрифтом. Я ищу отображение значения под штрих-кодом, как показано на прилагаемом изображении. Спасибо – acadia

+0

Правильно. И чтобы указать штрих-код для отображения его текста, вы устанавливаете шрифт. Говорит так прямо в [JavaDoc] (http://api.itextpdf.com/com/itextpdf/text/pdf/Barcode.html) для 'Barcode.setFont()'. Нечетная грамматика, но идея есть. Как ни странно, конструктор по умолчанию для Barcode128 инициализирует шрифт Helvetica/WinAnsiEncoding. Какую версию iText вы используете, и какой текст вы пытаетесь отобразить? –

+0

Я не думаю, что это возможно ... Я пробовал все варианты, о которых я мог думать, и не мог получить желаемый результат ... если кому-то удастся добиться этого, реальный ответ будет отличным. . (@Mark Storer - это не iText, это iTextSharp - порт для .NET). – veljkoz

4

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

Чтобы создать изображение штрих-кода, я использовал входы, которыми владеет 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); 

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

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

0
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); 
+1

Пожалуйста, не предоставляйте ответы только на код, но также объясняйте, как и почему ваше решение решает проблему. –