2011-02-07 155 views
7

Estoy usando iTextSharp en mi aplicación para generar un código de barras. Aunque todo funciona como yo quería, necesito mostrar el valor del código de barras en el código de barras como el que aparece en la imagen adjunta. Sample BarcodeCódigo de barras con texto debajo de usar ItextSharp

A continuación se muestra el código C# que utilizo:

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

¿Podría [esto] (http://stackoverflow.com/questions/3215522/itextsharp-adding-text-plus-barcode-in-a-single-cell) ayudar? –

Respuesta

6

Este es el código que encontré mientras que buscando en la red. Espero que esto resuelva su problema:

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

Lo siento, el texto no aparece bajo el código de barras. Gracias por intentar ayudar. – acadia

+4

¡Lol! ¡ese fragmento se parece al de mi blog! http://www.jphellemons.nl/post/Make-a-code128-barcode-with-C-sharp-and-iTextSharp.aspx –

0

Ah. Debes configurar la fuente. Recomiendo usar FontFactory.registerDirectories() y FontFactory.getFont(name).

registerDirectories() enumerará todos los directorios que se sabe que utilizan los SO para almacenar fuentes. Windows (de cualquier sabor) no es problema. Una vez hecho esto, puede obtener fácilmente las fuentes de la fábrica. Todas las simbologías de códigos de barras de las que tengo conocimiento no deberían tener problemas con la codificación predeterminada, por lo que solo debes pedir un nombre de fuente básico en lugar de conocer una ruta. FontFactory rastrea toda la información de ruta para usted. Práctico.

+0

Mark no es la fuente. Estoy buscando mostrar el valor bajo el código de barras como el que se muestra en la imagen adjunta. Gracias – acadia

+0

Eso es correcto. Y para decirle a un código de barras que muestre su texto, configura una fuente. Lo dice ahí mismo en [JavaDoc] (http://api.itextpdf.com/com/itextpdf/text/pdf/Barcode.html) para 'Barcode.setFont()'. Gramática extraña, pero la idea está allí. Curiosamente, el constructor predeterminado para Barcode128 inicializa la fuente a Helvetica/WinAnsiEncoding. ¿Qué versión de iText estás usando y qué texto estás tratando de mostrar? –

+0

No creo que esto sea factible ... Probé todas las opciones que pude pensar y no pude obtener el resultado deseado ... si alguien consigue hacer que esto funcione, una respuesta real sería genial ... . (@Mark Storer - no es iText, es iTextSharp - un puerto para .NET) – veljkoz

4

No hay una manera directa de mostrar el texto debajo de la imagen del código de barras usando iTextSharp dll. Intenté lo mismo y tuve una solución alternativa para mostrar el texto. Esta no es una solución directa, pero proporcionará un resultado similar al esperado de una imagen de código de barras.

Para generar la imagen del código de barras, utilicé las entradas compartidas por JP Hellemons en su blog. Gracias JP Hellemons! http://www.jphellemons.nl/post/Make-a-code128-barcode-with-C-sharp-and-iTextSharp.aspx

El código que he utilizado:

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

corrígeme si me he equivocado ..

Si alguno de ustedes tiene una solución directa o simple, por favor compartirlos ..

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

No proporcione respuestas de solo código, pero también explique cómo y por qué su solución resuelve el problema. –

Cuestiones relacionadas