首页 > 解决方案 > 如何使用 PYPDF 2 为多个页面添加水印更高效

问题描述

我正在尝试编写一个简短的脚本,该脚本编号为 100 页 pdf(~100MB),这是输入文件。我制作了大约 60KB 的水印文件,并试图生成一个输出,该输出将 2 个文件逐页合并以生成编号的输出文件。水印文件由 reportlab 生成,它只是一个 100 页的空白文档,底部有正确的页码(1、2、3、4、5 等...)

尽管该脚本有效,但使用平均大约 30% 的 CPU 利用率和 5.5GB 的 RAM 使用率的平庸四核运行需要 13 分钟。这比我预期的要多,因为水印文件的生成几乎是瞬时的。

输出文件也约为 285MB,比输入文件和水印文件的总和还要多。

代码如下:

def mergepdffiles(inputfile,outputfile,watermarkfile):
    template = PyPDF2.PdfFileReader(open(inputfile, 'rb'))
    watermark = PyPDF2.PdfFileReader(open(watermarkfile, 'rb'))
    output = PyPDF2.PdfFileWriter()
    for i in range(template.getNumPages()):
        page = template.getPage(i)
        page.mergePage(watermark.getPage(i))
        output.addPage(page)

    with open(outputfile, 'wb') as file:
        output.write(file)
    return None

我怀疑在处理速度和内存使用方面有一种更有效的方法来做到这一点。

或者,是否有一种更优化的方法可以为多页 pdf 中的每一页添加页脚,而无需合并两个现有文件?我认为这会更有效率。

标签: pythonpython-3.xpdfreportlabpypdf2

解决方案


也许答案会帮助你在Is there a way to speed up PDF page merging...其中使用了compressContentStreams()函数来减小 pdf 的大小,并且还使用100% 的处理器。


推荐阅读