使用itextsharp创建带有文本图像(不是pdf)的条形码

时间:2010-12-18 07:31:49

标签: itextsharp barcode

我可以使用itextsharp CreateDrawingImage方法创建条形码。但我想将实际文本包含在图像中。我怎么做?或者如何使用CreateImageWithBarcode方法保存为图像(Jpeg / Png)?

由于

4 个答案:

答案 0 :(得分:2)

面对同样的问题,在查看iTextSharp来源后,看来你不能。除了CreateDrawingImage()之外,我还遇到了图像大小调整的问题,它模糊不清。

我最终使用这个库(非常酷):

http://www.codeproject.com/KB/graphics/BarcodeLibrary.aspx

EAN13代码:

System.Drawing.Image imageBarcode = BarcodeLib.Barcode.DoEncode(BarcodeLib.TYPE.EAN13, barcode, true, Color.Black, Color.White, 500, 250);

答案 1 :(得分:0)

这是我处理BarCodes的功能:

public static Image AddBarCode(ref PdfWriter Writer, string Text, bool ShowText, float ScaleWidth, float ScaleHeight)
{

    // http://forums.asp.net/t/1599409.aspx
    PdfContentByte cb = Writer.DirectContent;
    Barcode39 bc39 = new Barcode39();
    bc39.Code = Text;
    // comment next line to show barcode text   
    if (!ShowText) bc39.Font = null;
    Image barCodeImage = bc39.CreateImageWithBarcode(cb, null, null);
    barCodeImage.Alignment = PdfAppearance.ALIGN_CENTER;
    barCodeImage.ScalePercent(ScaleWidth, ScaleHeight);
    return barCodeImage;
}

要使用它,你会做这样的事情:

doc.Add(PDFHelper.AddBarCode(ref writer, pitch.DBLabelGroup.BarCode, true, 100, 200));

我最初在这里找到了代码来实现这个功能:    http://forums.asp.net/t/1599409.aspx

答案 2 :(得分:0)

我有 GetBarcode.ashx (通用处理程序) 它会保存到输出流(直接在屏幕上)和磁盘上。

像这样使用它:

<img src="GetBarcode.ashx?code=yourcodehere" />
HTML中的

,这是处理程序:

<%@ WebHandler Language="C#" Class="GetBarcode" %>

using System;
using System.Configuration;
using System.Drawing;
using System.Drawing.Imaging;
using System.Web;
using iTextSharp.text.pdf;
using Rectangle = iTextSharp.text.Rectangle;

public class GetBarcode : IHttpHandler {

    private Bitmap bm;

    public void ProcessRequest (HttpContext context) 
    {
        string prodCode = context.Request.QueryString.Get("code");
        string fileName = ConfigurationManager.AppSettings.Get("absolutePath") + @"bc\" + prodCode + ".gif";

        // if already on disk, use it. otherwise create it.
        try 
        {
            bm = new Bitmap(fileName);
        }
        catch
        {
            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;
                bm = new Bitmap(code128.CreateDrawingImage(Color.Black, Color.White));
                bm.Save(fileName); // to disk
            }
        }

        bm.Save(context.Response.OutputStream, ImageFormat.Gif); // to screen
    }

    public bool IsReusable {
        get {
            return false;
        }
    }
}

答案 3 :(得分:0)

您可以使用条形码在图像上绘制文本覆盖图。如果您正在生成一维条码(如Code 39,Code 128等),则条形码会根据输入值更改其宽度,但高度是常量值。

因此,您可以简单地计算文本的Y坐标和X坐标,并使用如下代码(based on the code from this this answer)绘制文本:

    RectangleF rectf = new RectangleF(70, BarCodeBottom, 90, 50);

    Graphics g = Graphics.FromImage(BarCodeImage);

    // set text drawing modes for the high quality look
    g.SmoothingMode = SmoothingMode.AntiAlias;
    g.InterpolationMode = InterpolationMode.HighQualityBicubic;
    g.PixelOffsetMode = PixelOffsetMode.HighQuality;
    g.DrawString("some barcode caption text", new Font("Tahoma",8), Brushes.Black, rectf);

    g.Flush();       

或者您可以使用一些自动计算文本位置的商业组件(但如果您已经依赖iTextsharp,则最好使用自己的代码)。

免责声明:我为ByteScout BarCode Generator SDK的制造商ByteScout工作。