使用iTextSharp生成的Code128A条形码与Barcode.4NET生成的条形码不匹配问题

3

首先,我对条形码格式有些陌生,我所了解的都是通过维基百科学习的。

我们有一些由现有应用程序生成的条形码,该应用程序使用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";

下面的图片展示了我目前为止所取得的最佳成果。 alt text 上面的图像是由iTextSharp生成的,下面的是由Barcode4Net生成的。显然,它们不相同(不仅在大小和字体上不同 - 条形码数据也非常不同)。
有没有人熟悉iTextSharp(或iText本身)的条形码组件或Code 128A条形码,可以告诉我如何使iTextSharp的条形码看起来与Barcode.4NET的完全一样?
3个回答

3
他们看起来真的需要完全相同吗?Code 128的不同版本都能够编码数字,即使条形码本身看起来完全不同;读取器最终应该会把它们分类。
我更喜欢B变体,因为它除了大写字母外还有小写字母。您可以在http://www.barcodeisland.com/code128.phtml上查看详细的差异表格。
iTextSharp看起来正在生成变体C,如果文本只包含十进制数字,则是最紧凑的。它将2个数字编码到与其他编码中单个字符相同的空间中。

虽然这不完全是我寻找的答案,但我会接受它。我的客户说只要标准扫描仪能够读取其中一个,那么就可以了,现在我知道哪一个是哪一个了。 - CMPalmer

3

数字应为:

*045746201627080857*

您需要在条形码的开头和结尾添加星号,以便可以读取条形码。您需要查看组件文档,确定哪个组件需要这些字符。

扫描仪需要在此类型的条形码上添加前导和尾随星号。

从您的代码中我所能看到的是该行:

code128.StartStopText = true;

如果自动添加了它,请尝试将此属性设置为false,您最终将得到相同的条形码。在第一段代码中,您应该使用

Code128ABarcode c128A = new Code128ABarcode("*045746201627080857*");

尝试自己 :)

编辑:

正确的条形码是:

alt text

从下面的链接中获取(使用ID Automation免费服务):

http://www.bcgen.com/demo/linear-dbgs.aspx?D=045746201627080857&S=13&CS=1

你所拥有的是:

alt text

这是 Code128C 而不是 Code128A,你可以通过链接进行检查(我将 条形码属性 更改为 Code128C)

http://www.bcgen.com/demo/linear-dbgs.aspx?D=045746201627080857&S=13&CS=3


Code128ABarcode这一行显然是正确的(这就是我试图匹配的)。无论我尝试使用哪种星号和更改StartStopText的组合,仍然无法匹配。 - CMPalmer
我刚刚编辑并添加了正确的代码。Barcode.4NET库给你的是Code128C而不是Code128A。 - balexandre
星号仅适用于Code 3 of 9,不适用于Code 128。 - Mark Ransom

1

虽然我认为balexandre混淆了生成器,但他的建议很好。

显然Barcode.4NET正在正确生成我试图模拟的Code 128A条形码。

iTextSharp正在生成Code 128C条形码,根据Mark Ransom的说法,这应该没问题,除非用户和客户可能会看着它说:“它太短了,应该像其他的一样!”

所以,很好的建议,但我仍然回到“如何使用iTextSharp生成Code 128A条形码?”


条形码阅读器将读取两者,如果您设置它,默认情况下Datalogic和Symbol设备读取Code128 A到C,无需任何特定参数。 - balexandre
谢谢。我正在与我们的客户核实,看看他们是否介意切换到128C条形码。 - CMPalmer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接