我可以使用itextsharp CreateDrawingImage方法创建条形码。但我想将实际文本包含在图像中。我怎么做?或者如何使用CreateImageWithBarcode方法保存为图像(Jpeg / Png)?
由于
答案 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工作。