使用 iTextSharp 生成的 Code128A 条形码与使用 iTextSharp 生成的 Code128A 条形码匹配时出现问题条码.4NET
-
08-07-2019 - |
题
首先,我对条形码格式有点陌生,我所知道的都是从维基百科学到的。
我们有一些由使用 Barcode.4NET 库的现有应用程序生成的条形码。条形码采用 Code 128A 格式。生成它们的代码非常简单,如下所示:
// Create the barcode
Code128ABarcode c128A = new Code128ABarcode("045746201627080857");
没有为其设置其他参数 - 设置数据后,我们只是从库中获取条形码的 GIF 版本。
我正在开发一个使用 iTextSharp 生成 PDF 的新应用程序,我认为我不会使用两个库,而是使用 iTextSharp 的条形码生成库,因为它支持 Code128 条形码。它有几种不同的 Code 128 变体,但它们都不是“Code 128A”。
代码如下:
Barcode128 code128 = new Barcode128();
code128.CodeType = Barcode.CODE128;
code128.ChecksumText = true;
code128.GenerateChecksum = true;
code128.StartStopText = true;
code128.Code = "045746201627080857";
下图显示了我迄今为止所取得的最好成绩。
上面的图像是由 iTextSharp 生成的,下面的图像是由 Barcode4Net 生成的。显然,它们不一样(不仅仅是大小和字体 - 条形码数据非常不同)。
有没有人足够熟悉 iTextSharp 的(或 iText 本身)条形码组件或 Code 128A 条形码来告诉我如何使 iTextSharp 看起来与 Barcode.4NET 完全相同?
解决方案
它们真的有必要看起来完全一样吗? Code 128的不同版本都能够编码数字,即使条形码本身看起来完全不同;读者最终应该全力以赴。
我更喜欢B变体,因为它除了大写字母外还有小写字母。您可以在 http://www.barcodeisland.com/code128.phtml看到详细说明差异的表格。一>
iTextSharp看起来它正在生成变体C,如果文本只是十进制数字,则它是最紧凑的。它在与其他编码中的单个字符相同的空间量中编码2个数字。
其他提示
号码应为:
*045746201627080857*
您需要在开头和结尾添加星号,以便可以重新编码条形码,您需要检查组件文档中是否需要此字符。
扫描仪需要此类BC上的前导和尾随星号。
我在你的代码中看到的行
code128.StartStopText = true;
自动添加它,尝试将此属性设置为false,最终会得到相同的条形码。在第一个代码中,您应该使用
Code128ABarcode c128A = new Code128ABarcode("*045746201627080857*");
试试自己:)
<强>编辑:强>
正确的条形码是:
http://www.bcgen.com/demo/linear-dbgs.aspx?D=045746201627080857&S=13&CS=1
你拥有的是:
虽然我认为 balexandre 将生成器搞混了,但他的建议很好。
显然,Barcode.4NET 正确生成了我试图模拟的 Code 128A 条形码。
iTextSharp 正在生成 Code 128C 条形码,据 Mark Ransom 称,该条形码应该没问题,除非用户和客户可能会看着它并说“它太短了,应该看起来像其他条形码!”
所以,这是很好的建议,但我仍然回到“如何使用 iTextSharp 生成 Code 128A 条形码?”