使用zpl grf图像和cups的工具
zplgrf的Python项目详细描述
update:如果您只对打印时条形码的质量感兴趣,请首先尝试使用cups filters 1.11.4中的新像素中心选项。
zplgrf
这个项目包含了我在试图诊断为什么从Linux和OSX上的CUPS打印的条形码如此模糊/模糊等原因时,为从ZPL转换GRF图像而制作的实用程序。它还包含了我尝试锐化条形码和CUPS过滤器,您可以自行设置来尝试。
条形码质量
cups(至少我的windows驱动程序也是如此)将pdf打印到标签打印机的方法是将pdf转换为一个图像,然后将该图像嵌入到zpl中。问题在于,所有pdf转换器似乎都是为了保持字体质量,而不太关心矢量的质量。通常这会产生不可分析的条形码,特别是在大多数标签打印机的低203 dpi。
在生成您自己的PDF文件(条形码字体、将条形码捕捉到圆形单位等)时,有几种方法可以解决此问题,但它们都有其缺点,如果您必须打印由其他人生成的标签,则它们不会帮助您。
最初我试图从ghostscript获取灰度图像并转换为mono,同时保持条形码质量,但最终总是破坏字体质量。我注意到windows生成的grf在文本上显示了类似的工件,一个零售osx驱动程序在他们的指南中说,他们的驱动程序也可能影响文本质量,所以我认为这种后处理可能是其他人正在做的事情。
最后,我选择从ghostscript中获取一个单声道图像,然后搜索图像数据以找到任何可疑的条形码,并简单地扩大白色区域。这是非常愚蠢和简单,但为我工作。你可能需要为你自己的标签调整它,很有可能它实际上会使你的条码更糟。
更新:在从PDF转换时,我还添加了对Ghostscript中像素中心规则的支持。这提高了条码质量,但也降低了某些文本的质量。
安装
运行pip install zplgrf。
依赖性
正常安装应该处理常规的python依赖项,但是这个项目还需要安装ghostscript(gs)。推荐使用较新版本的gs,因为旋转的pdf不能与仍有许多发行版的gs的一些旧版本正常工作。
使用python api
一些快速演示。
打开pdf,优化条形码,并显示zpl:
from zplgrf import GRF with open('source.pdf', 'rb') as pdf: pages = GRF.from_pdf(pdf.read(), 'DEMO') for grf in pages: grf.optimise_barcodes() print(grf.to_zpl())
从PDF转换时,使用Ghostscript的像素中心规则而不是我的optimise_barcodes()方法可以获得更好的性能和条形码:
from zplgrf import GRF with open('source.pdf', 'rb') as pdf: pages = GRF.from_pdf(pdf.read(), 'DEMO', center_of_pixel=True) for grf in pages: print(grf.to_zpl())
要转换图像,请执行以下操作:
from zplgrf import GRF with open('source.png', 'rb') as image: grf = GRF.from_image(image.read(), 'DEMO') grf.optimise_barcodes() print(grf.to_zpl(compression=3, quantity=1)) # Some random options
如果zpl无法打印,则可能打印机不支持zb64压缩图像,因此请尝试compression=2。
从zpl中提取所有grf并将其保存为png:
from zplgrf import GRF with open('source.zpl', 'r') as zpl: grfs = GRF.from_zpl(zpl.read()) for i, grf in enumerate(grfs): grf.to_image().save('output-%s.png' % i, 'PNG')
优化ZPL文件中的所有条形码:
from zplgrf import GRF with open('source.zpl', 'r') as zpl: print(GRF.replace_grfs_in_zpl(zpl.read()))
各种方法的参数记录在源代码中。像to_zpl()和optimise_barcodes()这样的一些参数可能需要为您的目的进行调整。
使用杯形过滤器
正常安装包,然后将pdftozpl复制到cups过滤器目录,该目录通常为/usr/lib/cups/filter。确保复制的文件与文件夹中的其他筛选器具有相同的权限。
现在编辑打印机的ppd文件,该文件通常位于/etc/cups/ppd。找到包含*cupsFilter的行,并在它们下面添加以下内容:
*cupsFilter2: "application/pdf application/octet-stream 50 pdftozpl"
现在重新启动cups,这个新的过滤器将生效。请注意,*cupsFilter2筛选器需要cups 1.5+并且它们禁用所有常规的*cupsFilter筛选器,因此您可能需要为其他mimetype设置更多筛选器。
application/octet-stream是用于原始打印的mimetype cups,我们使用ant将原始zpl发送到打印机。
性能
cups过滤器的性能与用c编写的本机过滤器相比相当糟糕。在树莓pi 3上运行大约需要2.5秒,但在一台像样的计算机上运行的毫秒数很低。