0

我需要能够将任何字符串转换为可以打印在 PDF 上的 code128 条形码。

我的想法是将 code128 字体嵌入到 PDF 中,然后简单地使用该字体来呈现我需要显示为条形码的字符串,一个字母一个字母。

但是,我发现我还需要计算校验和并包括开始和停止字符。

这不可能使用PHP吗?我在任何地方都没有找到任何解决方案。我能找到的唯一解决方案是将条形码直接渲染为图像,这对我目前的情况没有帮助,因为我需要使用字体在 PDF 中创建条形码。

4

2 回答 2

4

如果您将努力限制在 128B,您可以访问大小写字符、数字和大多数标点符号。它还使您不必编写代码来移入和移出 A 和 C 符号体系。这使得计算校验和的代码非常简单。

Code 128B 起始字符的值为 104。所有 Code 128 变体的终止字符的值为 106,但该值不计入校验和计算。让我们为现实生活中的练习选择字符串“Hello”。您需要确保您可以访问Code 128 表。我将讨论的所有值都在该表之外,而不是 ASCII 或 UTF-8。

校验和是通过将字符值的倍数与其在条形码中的位置相加来计算的,起始码除外。

虽然起始码的位置是“1”,但起始码后面的第一个字符的位置也是如此。所以起始码和数据的第一个字节 ('H') 都乘以数字 1 ((104 × 1) + (40 × 1) = 144)。

接下来的 4 个字节得到一个递增的乘数 ((69 x 2) + (76 × 3) + (76 × 4) + (79 × 5) = 1065)。将它们加在一起 ​​(144 + 1065) 我们得到 1209。

您应该能够在 PHP 中使用模数运算符 (1209 % 103) 来获得 76 作为 Code 128B 字符串“Hello”的校验和字符(103 是一个常数,相信我)。因此,将“Hello”映射到 Code 128 条形码的最终代码数组是:[104 40 69 76 76 79 76 106]。

您需要查找表来将字符串字符值转换为 Code 128B 字符值,以适应您的条形码字体所期望的任何值。但是你只需要一个循环、一个数组索引、一个因子和的累加器以及一个针对常数值 103 的模运算符。

于 2015-02-24T20:20:20.840 回答
3

在 PHP 中为 PDF 生成条形码的最简单方法是使用专用的软件库。

AFAIK,目前最完整的是tc-lib-barcode ( https://github.com/tecnickcom/tc-lib-barcode ),它允许您生成线性和二维条码。包含的示例应该可以让您快速入门。

源代码完全符合 PSR-2 标准,可以使用Composer轻松添加到您的 PHP 项目中。

原始代码已从TCPDF移植和重构,并已在数十亿文档中使用。

于 2015-06-30T07:48:15.390 回答