2 回答

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超8個(gè)贊
山姆,
首先,您的條形碼不會(huì)按原樣掃描。該字符串需要為 Code128B 添加一個(gè)開始字符、一個(gè)校驗(yàn)和和一個(gè)停止字符。所以,就是這樣。
我建議更改為 Code 39 字體(不需要校驗(yàn)和,并且開始和停止字符相同:“*”)或編寫代碼以生成校驗(yàn)和并在Code 128 Wiki 上了解更多關(guān)于Code 128 的信息。
其次,我懷疑在轉(zhuǎn)換為 PDF 期間圖形的邊界框存在問(wèn)題。被轉(zhuǎn)換的那一小部分條碼看起來(lái)更像是字符串中數(shù)字 9 的一部分。我懷疑正在進(jìn)行一些圖像剪輯。
嘗試替換常規(guī)文本字體以確保條碼圖像不會(huì)在轉(zhuǎn)換過(guò)程中丟失。
編輯答案以包含使用 PNG 而不是 PDF 的建議。
如果您輸出為 PNG 格式,我設(shè)法讓該軟件正常工作。我知道,現(xiàn)在問(wèn)題變成了如何將 PNG 轉(zhuǎn)換為 PDF。您可以從調(diào)查這里提到的一些庫(kù)開始:從圖像列表創(chuàng)建 PDF
簡(jiǎn)而言之,我建議您創(chuàng)建圖形文件,然后將它們嵌入到文檔文件中。
我還添加了使用開始、校驗(yàn)和和停止字符構(gòu)建條形碼所需的代碼:
導(dǎo)入操作系統(tǒng)
導(dǎo)入 matplotlib.pyplot 作為 plt
從 matplotlib 導(dǎo)入 font_manager 作為 fm
def draw_label(label, label_dimensions_x=3.8189, label_dimensions_y=1.41732):
# 導(dǎo)入條碼code128字體
fpath = os.path.join("./", "code128.ttf")
prop = fm.FontProperties(fname=fpath, size=32)
圖, ax = plt.subplots(1, figsize=(label_dimensions_x,
label_dimensions_y))
plt.axis('關(guān)閉')
plt.xticks([], [])
plt.yticks([], [])
plt.tight_layout()
plt.xlim(0, label_dimensions_x)
plt.ylim(0, label_dimensions_y)
# calc checksum THEN 繪制條形碼
重量 = 1
總和 = 104
對(duì)于標(biāo)簽中的 x:
chksum = chksum + 權(quán)重*(ord(x)-32)
重量 = 重量 + 1
chksum = chksum % 103
chkchar = chr(chksum+32)
label128 = "%s%s%s%s" % ('?', label, chkchar, 'ó')
plt.text(label_dimensions_x / 2, label_dimensions_y / 2, label128,
ha='中心', va='底部',
字體屬性=道具)
嘗試:
plt.savefig(os.path.join("./", label + '.png'))
除了權(quán)限錯(cuò)誤:
logging.warning("在運(yùn)行此腳本之前關(guān)閉當(dāng)前標(biāo)簽 pdf。")
返回
draw_label('123456789')
draw_label('987654321')
draw_label('測(cè)試&顯示')
添加回答
舉報(bào)