2 回答

TA貢獻1818條經驗 獲得超8個贊
山姆,
首先,您的條形碼不會按原樣掃描。該字符串需要為 Code128B 添加一個開始字符、一個校驗和和一個停止字符。所以,就是這樣。
我建議更改為 Code 39 字體(不需要校驗和,并且開始和停止字符相同:“*”)或編寫代碼以生成校驗和并在Code 128 Wiki 上了解更多關于Code 128 的信息。
其次,我懷疑在轉換為 PDF 期間圖形的邊界框存在問題。被轉換的那一小部分條碼看起來更像是字符串中數字 9 的一部分。我懷疑正在進行一些圖像剪輯。
嘗試替換常規文本字體以確保條碼圖像不會在轉換過程中丟失。
編輯答案以包含使用 PNG 而不是 PDF 的建議。
如果您輸出為 PNG 格式,我設法讓該軟件正常工作。我知道,現在問題變成了如何將 PNG 轉換為 PDF。您可以從調查這里提到的一些庫開始:從圖像列表創建 PDF
簡而言之,我建議您創建圖形文件,然后將它們嵌入到文檔文件中。
我還添加了使用開始、校驗和和停止字符構建條形碼所需的代碼:
導入操作系統
導入 matplotlib.pyplot 作為 plt
從 matplotlib 導入 font_manager 作為 fm
def draw_label(label, label_dimensions_x=3.8189, label_dimensions_y=1.41732):
# 導入條碼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('關閉')
plt.xticks([], [])
plt.yticks([], [])
plt.tight_layout()
plt.xlim(0, label_dimensions_x)
plt.ylim(0, label_dimensions_y)
# calc checksum THEN 繪制條形碼
重量 = 1
總和 = 104
對于標簽中的 x:
chksum = chksum + 權重*(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'))
除了權限錯誤:
logging.warning("在運行此腳本之前關閉當前標簽 pdf。")
返回
draw_label('123456789')
draw_label('987654321')
draw_label('測試&顯示')
添加回答
舉報