2015-02-24 26 views
0

我需要能够将任何字符串转换为可打印在PDF上的code128条形码。在PHP中创建code128条形码,使用字体而不是将其渲染为图像

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

但是,我发现我还需要计算校验和并包含开始和结束字符。

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

+0

PHP的一些PDF库带有条形码生成功能。你检查过吗?你在使用哪个库? – j4k3 2015-02-24 17:35:42

+1

为什么你需要使用字体?你不能只是在PDF中嵌入图像? – Halcyon 2015-02-24 17:38:07

+0

您是否需要支持Code 128A,B和C或128B? – 2015-02-24 18:41:22

回答

3

最简单的方式来生成PDF中的PDF条码是使用专用软件库。

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

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

原始代码已被移植并从TCPDF重构并已用于数十亿的文档。

+0

您与该项目的关系如何? – 2015-06-30 13:13:45

+0

@MartijnPieters他是开发人员 – jeffmcneill 2016-08-23 07:59:37

+1

这很棒,但是对于简单的校验和计算而言,这是一个巨大的项目和矫枉过正。 @ BrianAnderson在下面的答案中描述了需要的内容:读入字符,查找表中的数值,增量乘数,加上这些加起始和终止字符以及模数。然后根据数值反向查找字符。然后输出开始字符,文本字符串,校验字符和停止字符。最后,使用大泽布的GPL字体Code128等条形码字体。大泽布在他的网站上也有一些VBA代码:http://grandzebu.net/informatique/codbar-en/code128.htm – jeffmcneill 2016-08-23 08:28:28

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 x 3)+(76 x 4)+(79 x 5)= 1065)。总结起来(144 + 1065)我们得到1209.

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

您将需要查找表来将字符串字符值转换为代码128B字符值,无论您的条形码字体是否期待。但所有你需要的是一个循环,一个数组索引,一个累加器的总和的因素和模数运算符对恒定值103.

相关问题