2015-12-02 389 views
0

我们正试图生成正确的EAN-128编码的产品标签,与TCPDF库,但 我们的客户说,条形码扫描器不读取生成的条形码。 原来(旧)条码和字符串:如何正确生成GS1-128(前EAN-128)条形码在TCPDF

enter image description here

的代码串是:

$codeString = "(01)08437013308045(3013)2675(15)161201(10)150518" 

如果我们直接将字符串传递到TCPDF功能,像这样:

$label->write1DBarcode($codeString, 'C128A', $x, $y, $w, $h); 

我们得到了正确的输出(扫描仪不会读取),但与原始条形码相比,条形码更密集d密度较小(他们说这是EAN-128): enter image description here

我们发现这里(EAN-128 with FNC1)的$codeString之前添加chr(241)应该帮助,但如果我们添加它,得到的图像在人类可读的代码剥去一切:

enter image description here

因为我们没有自己的条形码阅读器,我们不能检查错误自己。

我们在这里失踪了什么?我们使用TCPDF 6.2.12版。

+0

在第一个条形码中不生成parens,但我找不到任何理由通过TCPDF源查找。 –

回答

5

有许多的问题,在这里,我会工作,通过。

首先,你已经误读它包含固定长度的应用标识符(AI)领域(3103)2775表示净重原始条形码的文本。

你已经写了含有(3013)2675这是无效的代码。没有人工智能(3013),不幸的是,这将与表示项目计数的合法AI(30)匹配,后者是一个可变长度字段。因此,解码器将继续读取剩余的数据,直到代码结束为AI(30),因为没有后续的字段终止符(FNC1)。这是很多项目 - 实际上超过八位数字,所以读者可能会指出错误!

this answer的“提取”部分提供了GS1数据如何在Code 128条形码内编码以产生有效的GS1-128符号的背景。

我们假设你的意思是编码GS1数据(01)08437013308045(3103)2675(15)161201(10)150518

您需要在代码128中编码的原始数据是{FNC1}0108437013308045310326751516120110150518

这已经推导如下:

  • 与FNC1标志字符(指示GS1格式的数据的情况下)的数据开始。
  • AI的括号已被省略。
  • 由于您的数据仅包含固定长度的AI,因此不存在必须使用FNC1分隔符[*]来终止可变长度字段的情况。

[*]注意,在GS1 General Specifications§3.2“GS1应用的数字顺序标识符”提供认可的列表指示是否需要由FNC1字符终止,随后当额外的数据。

这种知识如何转化为TCPDF的代码?我从来没有使用过遗憾,但是这可能会有所帮助:

$codeString变量将需要定义是这样的:

$codeString = chr(241).'0108437013308045310326751516120110150518'; 

这假设链接回答关于支持论坛是正确的指出TCPDF使用ASCII顺序241来指示FNC1字符。 (There is some doubt whether this is the case.)如果有效,那么这是一个特定于库的选择,因此有关编码非数据字符(例如FNC1)的详细信息,您不应该多读取它们已选择值241. See here的事实。

我也注意到你传递C128Awrite1DBarcode这限制了符号模式A的type参数(数字,大写字母和控制字符)。这将是非常低效的,并可能导致一个符号,是太使用大多数标准设备(用于物流应用)进行扫描(或重新调整时密度过高)。

码128支持模式C,它提供的数字双密度压缩,所以你应该使用这个,可能是通过传递type=C128Ctype=C128(自动)假设自动编码,它TCPDF的是什么好和未来的符号,你将创造可能需要包含字母。

$label->write1DBarcode($codeString, 'C128', $x, $y, $w, $h); 

至于条形码下方的人类可读的文本而言,如果没有为正确编码的数据显示正确,那么你可能需要提高的bug报告或反对TCPDF功能要求。

+0

感谢您的详细解释,我们已经修复了3103代码错字和'C128',剥离了伴奏,添加了臭名昭着的字符(241),没有运气。你知道是否需要在每个AI前放置FNC1标志字符? – user1398498

+1

FNC1分隔符只用于终止非终端,可变长度的AI。 (严格地说,该规范精确地列出了不需要FNC1终止的固定长度字段,任何新分配的AI都需要FNC1终止,无论它们是可变长度还是不为实施者提供稳定的目标。)我已经更新了答案让这个更清楚。 –

+0

你最近的TCPDF输出是什么样的? –