2015-02-24 31 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.