使用字体在PHP中创建code128条形码,而不是将其渲染为图像

时间:2015-02-24 17:33:16

标签: php barcode code128

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

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

然而,我发现我还需要计算校验和并包括开始和结束字符。

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

2 个答案:

答案 0 :(得分:3)

如果您将工作量限制在128B,则可以访问大写和小写字符,数字和大多数标点符号。它还使您不必编写代码来移入和移出A和C符号。这使得计算校验和的代码真的很简单。

代码128B起始字符的值为104.所有Code 128变体的停止字符的值为106,但该值未计入chksum计算中。让我们选择字符串“Hello”进行真实的练习。您需要确保可以访问Code 128 table。我将讨论的所有值都不在该表中,而不是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代码128B字符串“Hello”的校验和字符(103是常量,请相信我)。因此,将“Hello”映射到Code 128条形码的最终代码数组是: [104 40 69 76 76 79 76 106]。

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

答案 1 :(得分:3)

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

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

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

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