2011-02-07 17 views
7

Sto usando iTextSharp nella mia applicazione per generare un codice a barre. Anche se tutto funziona come volevo, ho bisogno di visualizzare il valore del codice a barre sotto il codice a barre come quello mostrato nell'immagine allegata. Sample BarcodeCodice a barre con testo Sotto usando ItextSharp

Di seguito si riporta il codice # C che uso:

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

Può [questo] (http://stackoverflow.com/questions/3215522/itextsharp-adding-text-plus-barcode-in-a-single-cell) aiutare? –

risposta

6

Questo è il codice che ho trovato durante la ricerca in rete. Spero che questo risolva il tuo 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

Spiacenti, il testo non viene ancora visualizzato sotto il codice a barre. Grazie per aver cercato di aiutare. – acadia

+4

Lol! quello snippet sembra proprio quello sul mio blog! http://www.jphellemons.nl/post/Make-a-code128-barcode-with-C-sharp-and-iTextSharp.aspx –

0

Ah. È necessario impostare il carattere. Raccomando di usare FontFactory.registerDirectories() e FontFactory.getFont(name).

registerDirectories() enumera tutte le directory che i SO sono noti utilizzare per memorizzare i caratteri. Windows (di qualsiasi sapore) non è un problema. Una volta fatto, puoi facilmente ottenere i font dalla fabbrica. Tutte le simbologie di codici a barre di cui sono a conoscenza non dovrebbero avere problemi con la codifica predefinita, quindi è davvero necessario chiedere un nome di carattere di base piuttosto che conoscere un percorso. FontFactory tiene traccia di tutte le informazioni sul percorso per te. Maneggevole.

+0

Contrassegna non il carattere. Sto cercando di visualizzare il valore sotto il codice a barre come quello mostrato nell'immagine allegata. Grazie – acadia

+0

Questo è giusto. E per dire a un codice a barre di mostrare il suo testo, si imposta un font. Dice così proprio lì nel [JavaDoc] (http://api.itextpdf.com/com/itextpdf/text/pdf/Barcode.html) per 'Barcode.setFont()'. Grammatica dispari, ma l'idea è lì. Stranamente, il costruttore predefinito per Barcode128 inizializza il font su Helvetica/WinAnsiEncoding. Quale versione di iText stai usando e quale testo stai tentando di visualizzare? –

+0

Non penso che sia fattibile ... Ho provato ogni opzione che potevo pensare e non ho potuto ottenere il risultato desiderato ... se qualcuno riesce a farlo funzionare, una risposta reale sarebbe grandiosa .. . (@Mark Storer - non è iText, è iTextSharp - una porta su .NET) – veljkoz

4

Non esiste un modo diretto per visualizzare il testo sotto l'immagine del codice a barre utilizzando iTextSharp dll. Ho provato lo stesso e ho avuto una soluzione alternativa per visualizzare il testo. Questa non è una soluzione diretta, ma fornirà un output simile a quello che ci si aspetta da un'immagine di codice a barre.

Per generare l'immagine del codice a barre, ho utilizzato gli input condivisi da JP Hellemons nel suo blog. Grazie a JP Hellemons! http://www.jphellemons.nl/post/Make-a-code128-barcode-with-C-sharp-and-iTextSharp.aspx

Il codice che ho usato:

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

mi corregga se ho sbagliato ..

Se qualcuno di voi ha una soluzione diretta o semplice, si prega di condividere ..

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

Si prega di non fornire risposte di solo codice, ma anche di spiegare come e perché la soluzione risolve il problema. –

Problemi correlati