2015-12-02 124 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輸出是什麼樣的? –