使用python将pdf转换为png(没有pdf2image)

Posted

技术标签:

【中文标题】使用python将pdf转换为png(没有pdf2image)【英文标题】:Converting pdf to png with python (without pdf2image) 【发布时间】:2021-12-07 03:42:53 【问题描述】:

我想将 pdf(一页)转换为 png 文件。 我安装了 pdf2image 并收到此错误: windows中没有安装popler。

根据这个问题: Poppler in path for pdf2image,应该安装poppler并修改PATH。

我不能做任何这些(我在我正在使用的系统中没有必要的权限)。

我查看了 opencv 和 PIL,似乎都没有提供进行这种转换的可能性: PIL(请参阅此处https://pillow.readthedocs.io/en/stable/handbook/image-file-formats.html?highlight=pdf#pdf)不提供阅读 pdf 的可能性,只能将图像另存为 pdf。 openCV 也是如此。

任何建议如何使 pdf 到 png 转换?我可以安装任何 python 库,但我不能触摸 windows 安装。

谢谢

【问题讨论】:

我必须在 python 中完成,因为我只能从 Jupyter Hub 环境连接到 API,而且必须即时完成。 【参考方案1】:

PyMuPDF 支持 pdf 到图像的光栅化,无需任何外部依赖。

执行基本 pdf 到 png 转换的示例代码:

import fitz  # PyMuPDF, imported as fitz for backward compatibility reasons
file_path = "my_file.pdf"
doc = fitz.open(file_path)  # open document
for page in doc:
    pix = page.get_pixmap()  # render page to an image
    pix.save(f"page_i.png")

【讨论】:

嗨@Seon,但你正在导入一个my_file.png,我知道它可能是一个pdf,对吧? 确实是笔误,已修正! 如何只转换前 10 页? doc 是可索引的,因此您可以使用 for 循环:for i in range(10),并设置 page=doc[i]【参考方案2】:

这是一个生成任意分辨率(dpi)PNG图像的sn-p:

import fitz
file_path = "my_file.pdf"
dpi = 300  # choose desired dpi here
zoom = dpi / 72  # zoom factor, standard: 72 dpi
magnify = fitz.Matrix(zoom, zoom)  # magnifies in x, resp. y direction
doc = fitz.open(fname)  # open document
for page in doc:
    pix = page.get_pixmap(matrix=magnify)  # render page to an image
    pix.save(f"page-page.number.png")

生成PNG文件名称page-0.png, page-1.png, ... 通过选择dpi < 72 将创建缩略图页面图像。

【讨论】:

以上是关于使用python将pdf转换为png(没有pdf2image)的主要内容,如果未能解决你的问题,请参考以下文章

PyMuPDF和pdf2imagePython将PDF转成图片

我需要检测扫描图像中 QR 码的大致位置(PDF 转换为 PNG)

PDF2JPG-使用ImageMagick将PDF转换为JPG图像

PHP PDF2JPG - 使用ImageMagick将PDF转换为JPG图像

Pdf2Picture

Pdf2Picture