现在,reportlab 大部分时间都在制作 PDF。但是,当一个文件包含多个大图像(125 个文件,总磁盘大小为 7MB)时,我们最终会耗尽内存并在尝试构建最终应该小于 39MB 的 PDF 时崩溃。问题源于:
elif mode not in ('L','RGB','CMYK'):
im = im.convert('RGB')
self.mode = 'RGB'
将漂亮的黑白(黑白)图像转换为 RGB 并且当您的图像大小为 2595x3000 时,它们会消耗大量内存。(不知道为什么它们消耗 2GB,但这一点没有实际意义。当我们将它们添加到 reportlab 时,我们的整个 python 内存占用大约是 50MB,当我们调用
doc.build(elements, canvasmaker=canvasmaker)
当我们从双色 PNG 转换为 RGB 然后将它们渲染到页面上时,内存使用量猛增。
虽然我试图看看我是否可以弄清楚如何将双色调图像注入到 reportlab PDF 中,但我想我会看看是否有其他人知道如何在 reportlab 或其他工具中解决这个问题。
我们有一个在 C++ 中使用 PODOFO 的工作 PDF 制作器,我可能的解决方案之一是为该工具编写一个脚本/大纲,该工具将简单地在子进程中生成 PDF,然后通过文件或标准输出返回它。