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

时间:2008-11-17 02:46:59

标签: .net itextsharp itext barcode

首先,我是条形码格式的新手,我知道的,我从维基百科学到的。

我们有一些使用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 个答案:

答案 0 :(得分:3)

号码应为:

*045746201627080857*

您需要在开头和结尾添加星号,以便可以重新编码条形码,您需要检查组件文档,这需要这个字符。

扫描仪需要此类BC上的前导和尾随星号。

我在你的代码中看到的行

code128.StartStopText = true;

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

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

试试自己:)

<强>编辑:

正确的条形码是:

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

来自以下链接(使用ID Automation free service):

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

你拥有的是:

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

这是 Code128C ,而不是 Code128A ,因为您可以检查链接(我将barcode properties更改为Code128C)

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

答案 1 :(得分:3)

它们真的有必要看起来完全一样吗? Code 128的不同版本都能够编码数字,即使条形码本身看起来完全不同;读者最终应该全力以赴。

我更喜欢B变体,因为它除了大写字母外还有小写字母。您可以在http://www.barcodeisland.com/code128.phtml

上看到详细说明差异的表格

iTextSharp看起来它正在生成变体C,如果文本只是十进制数字,则它是最紧凑的。它在与其他编码中的单个字符相同的空间量中编码2个数字。

答案 2 :(得分:1)

虽然我认为balexandre混合了发电机,但他的建议很好。

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

iTextSharp正在生成一个Code 128C条形码,根据Mark Ransom的说法,除了用户和客户可能会看到它并说“它太短而且看起来应该像其他的一样!”时,它应该没问题。

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