咨询一下关于 Python 打印 pdf 的问题

2021-03-28 11:37:53 +08:00
 evilic

各位帮帮忙,实在是没有思路了……

问题是这样的,我有一个热敏打印机,打印订单用的。用的是 cainiao 的打印组件。直接用热敏打印机打单肯定是没有问题的。 现在有一个需求,就是要把订单给分类排序,让仓库好分拣一些,把同一类商品的单子在出单的时候放在一起。不过单子在录入的时候却是有先后顺序的。 为了解决这个问题,我的想法是,先用 cainiao 把单子打到 pdf 中去,然后再程序排序后,按分类后的正确顺序,把 pdf 对应的页面发送到打印机打印——如果原来 pdf 文件中的顺序是[1,2,3...],可能程序最终处理的结果是发送给打印机[2,1,3]...

我查找解决方案,走的路其实和 https://stackoverflow.com/questions/27195594/python-silent-print-pdf-to-specific-printer 帖子里的差不多。 首先是 AcroRD32 总是启动,然后看到帖子里面说的 ghostscript,就开始改用 ghostscript 进行尝试(不是 gsprint )。

gswin64c.exe -sDEVICE=mswinpr2 -sOutputFile="%printer%Deli DL-888B" "test.pdf"

果真单子是能打出来的……但另外的问题产生了,pdf 的大小是 A4 的大小,热敏纸的大小是 76x130mm 的,于是,打印 pdf 中的一页,会出 3 张热敏纸,其中第 2,3 页是空白的。 查文档,看文章 https://www.ghostscript.com/doc/current/Use.htm ,加上 -dDEVICEWIDTHPOINTS=w -dDEVICEHEIGHTPOINTS=h -dFIXEDMEDIA 参数,各种调整,打印出来的东西要么是只有一张纸且是空白,要么是一张纸但字儿是缩小后的,要么还是一下出 3 张纸且还是缩小的。(打印出来的效果其实就和 adobe reader 预览里的一样,不能跑到左上角)

继续查解决方法,https://stackoverflow.com/questions/3447720/how-can-i-shift-page-images-in-pdf-files-more-to-the-left-or-to-the-right ,知道 ghostscript 可以设置 PageOffset,不知道我理解的对不对,总是设置无果,报错。

由于 chrome 或者 edge 中的打印是正确的(无论一个 pdf 原本是多大,总是从左上打印到一张纸上后转入下一页的打印),于是我想着有没有 headless 的处理办法,或者命令的处理方法,但是搜索无果。

至此,方法穷了,来这里来了。 求各位给指个方向吧。谢谢了

2148 次点击
所在节点    程序员
13 条回复
evilic
2021-03-28 12:02:47 +08:00
补充一下,我之所以不先排序,再打单的原因是怕打乱了顺序不好发货……
如果大家都没有什么好的思路的话,我还是先排序再打单吧。
hs0000t
2021-03-28 13:22:48 +08:00
没用过热敏打印机,帮顶
LLaMA2
2021-03-28 13:31:42 +08:00
先查打印机文档,看他支持的纸张尺寸,接着保存 pdf 的时候就要设定好出多。然后按照你既定的方法走
evilic
2021-03-28 14:12:05 +08:00
@hs0000t 谢谢
evilic
2021-03-28 14:13:29 +08:00
@ye4tar 这个 pdf 是由 cainiao 组件直接出的,a4 纸大小,我无法调整…………
cctrv
2021-03-28 16:46:49 +08:00
https://pypi.org/project/cainiao/

自己組織數據去打印不就沒有 A4 那個問題嗎?
encro
2021-03-28 22:58:27 +08:00
初略看了下这个组件,不是有模板吗?最多修改或者自定义一个模板就行了吧?
encro
2021-03-28 23:01:39 +08:00
曾经用过快递鸟,也可以。
ScoutWang
2021-03-29 04:40:02 +08:00
把 pdf 转成 jpg,再调整为热敏纸的大小,再送入打印机打印
evilic
2021-03-29 13:07:25 +08:00
@cctrv 万分感谢!
evilic
2021-03-29 13:08:35 +08:00
@encro 不是这样的……模板是可以调整的,但是打印到 pdf 中的话,pdf 的页面总是 a4 纸的。只是 a4 纸上的内容,是你设置的大小。
evilic
2021-03-29 13:09:22 +08:00
@ScoutWang 恩呐,这个确实应该也是可行的。我准备先试试楼上的方法,直接上 cainiao 。
encro
2021-03-29 13:47:45 +08:00
其实我觉得没有必要这么麻烦,先塞入队列 1,然后排序加入队列 2,然后取出队列 2 有序文件,发送给打印机。

没必要转 PDF,虽然我知道改 pdf 页面尺寸的一堆方法。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/765831

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX