使用 ZXing.net 生成条码
Posted
技术标签:
【中文标题】使用 ZXing.net 生成条码【英文标题】:Generate barcode with ZXing.net 【发布时间】:2019-06-01 17:26:44 【问题描述】:我正在尝试使用 ZXing.NET 为 dot net core asp.net 应用程序生成条形码。我不知道如何用条形码显示文本,而且文档似乎真的非常非常缺乏。有谁知道如何使它工作?
这是我的代码(主要取自 SO 上的另一篇文章):
BarcodeWriterPixelData writer = new BarcodeWriterPixelData()
Format = BarcodeFormat.CODE_128,
Options = new EncodingOptions
Height = 400,
Width = 800,
PureBarcode = false, // this should indicate that the text should be displayed, in theory. Makes no difference, though.
Margin = 10
;
var pixelData = writer.Write("test text");
using (var bitmap = new Bitmap(pixelData.Width, pixelData.Height, System.Drawing.Imaging.PixelFormat.Format32bppRgb))
using (var ms = new System.IO.MemoryStream())
var bitmapData = bitmap.LockBits(new Rectangle(0, 0, pixelData.Width, pixelData.Height), System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format32bppRgb);
try
System.Runtime.InteropServices.Marshal.Copy(pixelData.Pixels, 0, bitmapData.Scan0, pixelData.Pixels.Length);
finally
bitmap.UnlockBits(bitmapData);
bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
return File(ms.ToArray(), "image/jpeg");
这给我一个条形码,但没有内容。
或者,更好/更容易使用/记录更好的库的建议也将不胜感激。
【问题讨论】:
【参考方案1】:您无需手动将这些像素数据复制到另一个流。总是喜欢使用接口提供的方法,即Save()
方法。
public void YourActionMethod()
BarcodeWriter writer = new BarcodeWriter()
Format = BarcodeFormat.CODE_128,
Options = new EncodingOptions
Height = 400,
Width = 800,
PureBarcode = false,
Margin = 10,
,
;
var bitmap = writer.Write("test text");
bitmap.Save(HttpContext.Response.Body,System.Drawing.Imaging.ImageFormat.Png);
return; // there's no need to return a `FileContentResult` by `File(...);`
演示:
【讨论】:
我不使用Save,因为这是一个Web应用程序,我只需要将条形码图像返回给客户端。 @Evgeni 这里的Save()
方法会接受一个http响应流作为参数,然后将条形码图像返回给客户端。看截图。
我一定错过了什么。尝试上面的代码我得到一个编译错误,说 BarcodeWriter 是通用的并且需要一个类型参数。我尝试使用 BarcodeWriterZXing.Net.Bindings.CoreCompat.System.Drawing
的引用,并通过 using ZXing; using ZXing.Common; using ZXing.CoreCompat.System.Drawing;
使用命名空间
由于某种原因,bitmap.Save(HttpContext.Response.Body,System.Drawing.Imaging.ImageFormat.Png);
没有向我这边的流返回任何内容。【参考方案2】:
并非每个可用的渲染器实现都支持输出条形码下方的内容(例如 PixelData 渲染器不支持它)。 您应该为不同的图像库使用特定实现之一。 例如,以下绑定提供了支持内容输出的渲染器(和特定的 BarcodeWriter): https://www.nuget.org/packages/ZXing.Net.Bindings.CoreCompat.System.Drawing https://www.nuget.org/packages/ZXing.Net.Bindings.Windows.Compatibility https://www.nuget.org/packages/ZXing.Net.Bindings.ZKWeb.System.Drawing https://www.nuget.org/packages/ZXing.Net.Bindings.SkiaSharp
【讨论】:
以上是关于使用 ZXing.net 生成条码的主要内容,如果未能解决你的问题,请参考以下文章