python - 如何使用 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 中的每一页添加页脚,而无需合并两个现有文件?我认为这会更有效率。
解决方案
也许答案会帮助你在Is there a way to speed up PDF page merging...其中使用了compressContentStreams()函数来减小 pdf 的大小,并且还使用100% 的处理器。
推荐阅读
- javascript - 'router-outlet' 是一个 Web 组件,然后在我编写单元测试时添加'CUSTOM_ELEMENTS_SCHEMA'
- c# - Tesseract OCR 从图像中读取文本
- css - 为什么 WordPress 后端样式在我的本地开发环境中不起作用?
- javascript - 有没有办法将所选项目作为轮播中的第一项?
- python - Matplotlib 颜色图在使用 .imsave() 和 .savefig() 方法时创建不同的图像
- vb.net - 如何以编程方式为水晶报表中详细部分的控件绘制线条?
- reactjs - 即使我在 React 中正确包含默认导出,也不包含默认导出
- python - 如何将字符串转换为类构造函数
- c++ - 来自 Nodejs 的 process.stdin.on 的 C++ 版本
- javascript - 如何在我的 Ajax 中包含我的 js 函数