【问题标题】:How to generate all PDF with all content on a single page?如何在单个页面上生成所有内容的所有 PDF?
【发布时间】:2022-02-25 07:51:59
【问题描述】:

我正在使用热敏打印机连续打印收据。为此,我需要生成 PDF 以发送到打印机。打印机使用 58 毫米卷纸。

如果将内容分解为多个固定高度的页面,最后一页通常会在末尾有很多垂直空白。然后打印机将不必要地推出 最后是一大堆白纸。然后我尝试将页面裁剪并合并为单个页面,但这非常低效(至少需要 4 秒,这是不可接受的)。

我能想到的唯一解决方案是在单个页面上生成包含所有内容的 PDF,页面宽度为 58 毫米,页面高度根据生成的内容动态设置。

我尝试使用 PyPDF2、reportlab 和其他几个库,但我尝试的所有库都需要在将元素放置到位之前设置精确的页面宽度。

任何想法如何做到这一点?

【问题讨论】:

    标签: python pdf printing thermal-printer receipt


    【解决方案1】:

    如果不利用热敏票据打印机的功能,您的问题或您想做的事情是无用的负担,因此我建议重新考虑并切换到字符代码打印。

    如果您仍想继续以前的方式,这些文章可能会有所帮助。
    text printed twice on the same page
    Resize pdf pages in Python

    例如,每次添加PDF时,可以创建一个空白页,将现有PDF和要添加的PDF的高度相加,然后将两个PDF重复合并到空白页中,动态扩展页面高度.


    以下是初步答案。
    我将把它作为利用热敏票据打印机功能的信息。


    毕竟打印机的图形数据缓冲区是有限的,所以不能为所欲为。

    缓冲区的大小取决于打印机,所以请仔细阅读您使用的打印机的规格。

    必须通过分离每台打印机的最大缓冲区大小来创建图像数据。


    对评论的回应:

    它可能是供应商制造的设备驱动程序或库,用于调整打印机的特性和操作系统的要求。

    如果您使用由此类供应商提供的设备驱动程序,则可能是可能的。
    换句话说,供应商的设备驱动程序在内部通过传递进行处理,如上所述,使应用程序看起来支持长页面。

    但是,如果您直接使用 ESC/POS 控制序列,或者使用不关心它的通用库,则不会发生这种情况。


    顺便说一下,如果打印的内容不是 PDF 或图像,并且您不需要像在桌面系统的文档打印机上打印那样的装饰,并且您将打印方法限制为仅打印机字体的范围,您可以打印到纸张的长度。

    总之,如果不需要将打印的内容扩展为图形数据就好了。

    【讨论】:

    • 我手动创建了一个大的PDF文件,单页,固定高度50cm和一些测试数据。打印机打印这个没有问题。通过制造商提供的驱动程序进行打印。我只是将 PDF 字节发送到设备。
    猜你喜欢
    • 2022-01-17
    • 2021-12-28
    • 2021-12-21
    • 1970-01-01
    • 2011-07-10
    • 1970-01-01
    • 2010-10-13
    • 1970-01-01
    • 2012-05-28
    相关资源
    最近更新 更多