2011-02-07 7 views
7

Używam iTextSharp w mojej aplikacji do generowania kodu kreskowego. Chociaż wszystko działa tak, jak chciałem, muszę wyświetlić wartość kodu kreskowego pod kodem kreskowym, tak jak to pokazano na załączonym obrazku. Sample BarcodeKod kreskowy z tekstem pod nazwą ItextSharp

Poniżej znajduje się kod C# używam:

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

Czy [this] (http://stackoverflow.com/questions/3215522/itextsharp-adding-text-plus-barcode-in-a-single-cell) może pomóc? –

Odpowiedz

6

Jest to kod znalazłem podczas przeszukiwania sieci. Mam nadzieję, że to rozwiąże Twój 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);    
} 
+0

Niestety tekst wciąż nie pojawia się pod kodem kreskowym. Dzięki za próbę pomocy. – acadia

+4

Lol! ten fragment wygląda tak jak ten na moim blogu! http://www.jphellemons.nl/post/Make-a-code128-barcode-w-C-sharp-and-iTextSharp.aspx –

0

Ah. Musisz ustawić czcionkę. Polecam używanie FontFactory.registerDirectories() i FontFactory.getFont(name).

registerDirectories() wyliczy wszystkie katalogi Systemy operacyjne, które są znane z przechowywania czcionek. Windows (o jakimkolwiek smaku) nie stanowi problemu. Gdy to zrobisz, możesz łatwo pobrać czcionki z fabryki. Wszystkie znane mi symbole kodów kreskowych nie powinny mieć problemu z domyślnym kodowaniem, więc naprawdę musisz poprosić o podstawową nazwę czcionki zamiast znać ścieżkę. FontFactory śledzi wszystkie informacje o ścieżce dla ciebie. Poręczny.

+0

Oznacz to nie czcionką. Szukam wyświetlania wartości pod kodem kreskowym, tak jak jeden program na załączonym obrazie. Dzięki – acadia

+0

To prawda. Aby ustawić kod kreskowy do wyświetlenia jego tekstu, należy ustawić czcionkę. Mówi tak w [JavaDoc] (http://api.itextpdf.com/com/itextpdf/text/pdf/Barcode.html) dla 'Barcode.setFont()'. Dziwna gramatyka, ale pomysł istnieje. O dziwo, domyślny konstruktor dla Barcode128 inicjuje czcionkę do Helvetica/WinAnsiEncoding. Jakiej wersji iText używasz i jaki tekst próbujesz wyświetlić? –

+0

Nie sądzę, że jest to wykonalne ... Próbowałem każdej opcji, o której mogłem pomyśleć i nie mogłem uzyskać pożądanego rezultatu ... jeśli komuś udaje się to zrobić, prawdziwa odpowiedź byłaby świetna ... (@ Mark Storer - to nie jest iText, to iTextSharp - port do .NET) – veljkoz

4

Nie ma bezpośredniego sposobu wyświetlania tekstu pod obrazkiem kodu kreskowego za pomocą biblioteki iTextSharp. Próbowałem tego samego i miałem obejście, aby wyświetlić tekst. To nie jest bezpośrednie rozwiązanie, ale zapewni wydruk podobny do oczekiwanego z obrazu kodu kreskowego.

Aby wygenerować obraz kodu kreskowego, użyłem danych udostępnionych przez JP Hellemons na jego blogu. Dzięki JP Hellemons! http://www.jphellemons.nl/post/Make-a-code128-barcode-with-C-sharp-and-iTextSharp.aspx

Kod, który użyłem:

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

Popraw mnie jeśli się myliłem ..

Jeśli ktoś z was ma bezpośredni lub prostsze rozwiązanie, proszę podzielić się nimi ..

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

Proszę nie udzielać odpowiedzi tylko do kodu, ale również wyjaśniać, w jaki sposób i dlaczego rozwiązanie rozwiązuje problem. –