使用zpl grf图像和cups的工具

zplgrf的Python项目详细描述


https://travis-ci.org/kylemacfarlane/zplgrf.svg?branch=masterhttps://coveralls.io/repos/github/kylemacfarlane/zplgrf/badge.svg?branch=master

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秒,但在一台像样的计算机上运行的毫秒数很低。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
swing Java按钮/网格布局   java列出Google日历中的所有事件   java无效:单击API publisher test按钮后连接到后端时出错   带有内部赋值的java While循环导致checkstyle错误   java为什么trimToSize/ensureCapacity方法提供“公共”级访问?   文件输出流的java问题   ListIterator和并发修改异常的java问题   java如何使用两个URL映射   无法识别使用“./../”构造的字符串java相对路径,为什么?   首次写入remotelyclosedsocket不会触发异常,对吗?JAVA   java OneDrive REST API为文件上载提供了400个无效谓词   Java泛型、集合接口和对象类的问题   OpenSSL Java安全提供程序   jmeter java运行jmx禁用操作