現在、reportlab はほとんどの場合 PDF を作成しています。ただし、1 つのファイルが複数の大きな画像 (ディスク上の合計サイズが 7 MB の 125 ファイル) を取得すると、最終的に 39 MB 未満になるはずの 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 メーカーがあります。私の考えられる解決策の 1 つは、そのツールのスクリプト/アウトラインを記述して、サブプロセスで PDF を生成し、それをファイルまたは stdout 経由で返すことです。