【问题标题】:Problem matching Code128A Barcodes generated with iTextSharp vs. Barcode.4NET使用 iTextSharp 与 Barcode.4NET 生成的 Code128A 条码匹配问题
【发布时间】:2008-11-17 02:46:59
【问题描述】:

首先,我对条形码格式有点陌生,我所知道的都是从 Wikipedia 学到的。

我们有一些由使用 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 完全一样?

【问题讨论】:

    标签: .net itextsharp itext barcode


    【解决方案1】:

    真的有必要让它们看起来完全一样吗? Code 128 的不同版本都能够编码数字,即使条形码本身看起来完全不同;读者应该把它全部整理出来。

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

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

    【讨论】:

    • 虽然这不是我正在寻找的答案,但我会点头。我的客户说,只要标准扫描仪可以读取其中一个,我们就可以了,现在我知道哪个是哪个。
    【解决方案2】:

    数字应该是:

    *045746201627080857*
    

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

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

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

    code128.StartStopText = true;
    

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

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

    试试自己:)

    已编辑:

    正确的条形码是:

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

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

    你拥有的是:

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

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

    【讨论】:

    • Code128ABarcode 行显然是正确的行(这是我要匹配的行)。我尝试过的星号和更改 StartStopText 的任何组合仍然不匹配。
    • 我刚刚编辑并添加了正确的代码。 Barcode.4NET 库为您提供 Code128C 而不是 Code128A。
    • 只有 Code 3 of 9 需要星号,而不是 Code 128。
    【解决方案3】:

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

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

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

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

    【讨论】:

    • 条形码阅读器将同时读取两者,如果您进行了设置,默认情况下 Datalogic 和 Symbol 设备会读取 Code128 A 到 C 而没有特定参数。
    • 谢谢。我正在与我们的客户核实他们是否介意改用 128C 条码。
    猜你喜欢
    • 2014-10-16
    • 2019-12-05
    • 2012-02-27
    • 1970-01-01
    • 2019-01-20
    • 2023-02-02
    • 2013-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多