将 PDF 渲染成图像(自包含,无外​​部命令行依赖)(在 AWS Lambda 上使用)

Render PDF into an image (self-contained, no external command line dependencies) (to use on AWS Lambda)

我需要一个简单的 python 库来将 PDF 转换为图像(按原样呈现 PDF),但经过几个小时的搜索,我总是碰壁,我发现像 pdf2image 这样的库python 库(以及许多类似的库),依赖于外部应用程序或包装命令行工具。

虽然有一些变通方法允许在无服务器设置中使用这些库,但它们都会使我们的部署复杂化,并且需要创建类似 Execution Environments 或额外的 lambda 层,这会占用较小的允许 lambda 大小.

是否有一个自包含的、独立的机制(不依赖于命令行工具)来实现这个(看似简单的)任务?

另外,我想知道,处理 PDF 的工具(它们大多是商业的或在严格的 AGPL 许可下)稀缺是否有原因(许可或专利)?

您说“最终使用 pdf2image”

pdf2image (MIT)。 python (3.6+) 模块,包装 pdftopm (GPL?) 和 pdftocairo (GPL?) 以将 PDF 转换为 PIL Image 对象。

一般Poppler (GPL) spinoffs from Open Source Xpdf (GPL)其中有

  • pdftopng:
  • pdftopm:
  • pdf图像:

和第 3 方 pdftotiff

您可以使用 PyMuPDF 将 PDF 转换为图像而无需外部依赖。我将它用于 Azure 函数。

安装 pip install PyMuPDF

在您的 python 文件中:

import fitz
pdfDoc = fitz.open(filepath)
img = pdfDoc[0].get_pixmap(matrix=fitz.Matrix(2,2))
bytesimg = img.tobytes()

这会获取 PDF 的第一页并将其转换为图像,矩阵用于分辨率。

您还可以打开流而不是磁盘上的文件:

pdfDoc = fitz.open(stream = pdfstream, filetype="pdf")