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";

下图显示了我迄今为止所取得的最好成绩。

替代文字

上图由 iTextSharp 生成,下图由 Barcode4Net 生成。显然,它们不一样(不仅在大小和字体上——条形码数据也大不相同)。

是否有人对 iTextSharp(或 iText 本身)的条形码组件或 Code 128A 条形码足够熟悉,可以告诉我如何使 iTextSharp 看起来与 Barcode.4NET 完全一样?

4

3 回答 3

3

数量应为:

*045746201627080857*

您需要在开头和结尾添加星号以便可以读取条形码,您需要在组件文档中检查是否需要此字符。

扫描仪需要这种类型的 BC 的前导星号和尾随星号。

对于我在您的代码中可以看到的内容,该行

code128.StartStopText = true;

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

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

自己试试:)

编辑:

正确的条形码是:

替代文字

从下面的链接(使用ID 自动化免费服务):

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

你所拥有的是:

替代文字

这是Code128C而不是Code128A,因为您可以检查链接(我将条形码属性更改为 Code128C)

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

于 2008-11-17T02:59:36.370 回答
3

他们真的有必要看起来完全一样吗?Code 128 的不同版本都可以对数字进行编码,即使条形码本身看起来完全不同;读者应该在最后把它全部整理出来。

我更喜欢 B 变体,因为除了大写字母之外,它还有小写字母。您可以在http://www.barcodeisland.com/code128.phtml上查看详细说明差异的表格

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

于 2008-11-17T04:44:18.563 回答
1

虽然我认为 balexandre 把发电机搞混了,但他的建议是好的。

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

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

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

于 2008-11-17T05:06:45.537 回答