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('测试&显示')
添加回答
举报