3

现在,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,然后通过文件或标准输出返回它。

4

1 回答 1

2

如果没有重做 PIL,你就不走运了。图像在 PIL 内部转换为 24 位彩色 TIF。这不是你可以轻易改变的。

我们切换到 Podofo 并在 python 之外生成 PDF。

于 2013-01-25T00:00:08.887 回答