解决 PyMuPDF 使用 get_pixmap 存在内存泄漏问题

当pdf文件有很多图像时,getPixmap会导致内存泄漏

trans = fitz.Matrix(zoom_x, zoom_y).prerotate(rotate)
for pg in range(doc.page_count):
    page = doc[pg]
    pm = page.get_pixmap(matrix=trans, alpha=False)

这是因为MuPDF故意将内容保留在内存中-达到某些提供的限制,并且-对于图像-即使在文档关闭之后也是如此。
因此,内存占用的实际场景不仅必须关闭文档,而且必须在内存增量之前强制释放该MuPDF缓冲区。

import gc
import fitz

# 使用MuPDF提供的工具
try:
    TOOLS = fitz.TOOLS
except:
    TOOLS = fitz.Tools()

doc = fitz.open(file_url)
trans = fitz.Matrix(zoom_x, zoom_y).prerotate(rotate)

for pg in range(doc.page_count):
    page = doc[pg]
    pm = page.get_pixmap(matrix=trans, alpha=False)
    pm.save(outfile)

# 内存回收,避免内存泄漏
doc.close()
TOOLS.store_shrink(100)  # reset MuPDF global context
gc.collect()

这与就可以避免内存泄漏了