V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
evilic
V2EX  ›  程序员

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

  •  
  •   evilic · 2021-03-28 11:37:53 +08:00 · 2354 次点击
    这是一个创建于 1371 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    问题是这样的,我有一个热敏打印机,打印订单用的。用的是 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 的处理办法,或者命令的处理方法,但是搜索无果。

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

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

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

    没必要转 PDF,虽然我知道改 pdf 页面尺寸的一堆方法。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   975 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 23:10 · PVG 07:10 · LAX 15:10 · JFK 18:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.