2011-02-07 29 views
7

Tôi đang sử dụng iTextSharp trong ứng dụng của mình để tạo mã vạch. Mặc dù mọi thứ đều hoạt động như tôi muốn, tôi cần hiển thị giá trị của mã vạch dưới mã vạch giống như một biểu tượng trong hình ảnh đính kèm. Sample BarcodeMã vạch với văn bản Đang sử dụng ItextSharp

Dưới đây là mã C# tôi sử dụng:

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

Có thể trợ giúp [this] (http://stackoverflow.com/questions/3215522/itextsharp-adding-text-plus-barcode-in-a-single-cell) không? –

Trả lời

6

Đây là mã tôi tìm thấy khi tìm kiếm trên net. Hy vọng điều này giải quyết vấn đề của bạn:

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

Rất tiếc, văn bản vẫn không xuất hiện bên dưới mã vạch. Cảm ơn bạn đã cố gắng để giúp đỡ. – acadia

+4

Lol! đoạn mã đó trông giống như đoạn trích trên blog của tôi! http://www.jphellemons.nl/post/Make-a-code128-barcode-with-C-sharp-and-iTextSharp.aspx –

0

Ah. Bạn cần đặt phông chữ. Tôi khuyên bạn nên sử dụng FontFactory.registerDirectories()FontFactory.getFont(name).

registerDirectories() sẽ liệt kê tất cả các thư mục Hệ điều hành được sử dụng để lưu trữ phông chữ. Windows (của bất kỳ hương vị) là không có vấn đề. Khi đã xong, bạn có thể dễ dàng lấy phông chữ từ nhà máy. Tất cả các mã vạch mã vạch mà tôi biết là không có vấn đề với mã hóa mặc định, vì vậy bạn thực sự chỉ cần hỏi một tên phông chữ cơ bản thay vì biết một đường dẫn. FontFactory theo dõi tất cả các thông tin đường dẫn cho bạn. Tiện dụng.

+0

Đánh dấu không phải là phông chữ. Tôi đang tìm kiếm hiển thị giá trị dưới mã vạch giống như hiển thị trong hình ảnh đính kèm. Cảm ơn – acadia

+0

Đúng vậy. Và để nói với một mã vạch để hiển thị văn bản của nó, bạn thiết lập một phông chữ. Nói như vậy ngay trong [JavaDoc] (http://api.itextpdf.com/com/itextpdf/text/pdf/Barcode.html) cho 'Barcode.setFont()'. Odd ngữ pháp, nhưng ý tưởng là có. Thật kỳ lạ, hàm tạo mặc định cho Barcode128 khởi tạo phông chữ thành Helvetica/WinAnsiEncoding. Bạn đang sử dụng phiên bản iText nào và bạn đang cố hiển thị văn bản nào? –

+0

Tôi không nghĩ rằng điều này là khả thi ... Tôi đã thử mọi tùy chọn tôi có thể nghĩ và không thể có được kết quả mong muốn ... nếu ai đó quản lý để làm việc này, câu trả lời thực sự sẽ tuyệt vời .. (@Mark Storer - nó không phải là iText, nó là iTextSharp - một cổng tới .NET) – veljkoz

4

Không có cách trực tiếp nào để hiển thị văn bản bên dưới hình ảnh mã vạch bằng cách sử dụng dll iTextSharp. Tôi đã thử như vậy và đã có một cách giải quyết để hiển thị văn bản. Đây không phải là giải pháp trực tiếp, nhưng sẽ cung cấp đầu ra tương tự như những gì được mong đợi từ hình ảnh mã vạch.

Để tạo hình ảnh mã vạch, tôi đã sử dụng các đầu vào được chia sẻ bởi JP Hellemons trong blog của mình. Cảm ơn JP Hellemons! http://www.jphellemons.nl/post/Make-a-code128-barcode-with-C-sharp-and-iTextSharp.aspx

Mã mà tôi đã sử dụng:

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

Đúng tôi nếu tôi đã sai ..

Nếu bất kỳ của bạn có một giải pháp trực tiếp hoặc đơn giản hơn, xin vui lòng chia sẻ chúng ..

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

Vui lòng không cung cấp câu trả lời chỉ có mã, mà còn giải thích cách thức và lý do giải pháp của bạn giải quyết được vấn đề. –

Các vấn đề liên quan