用Python将PDF文件转换成图片

文章目录

这个问题其实不是太复杂,可以通过在线的工具或者付费的工具完成,但是在线服务需要将文件上传到别人手里,而付费工具一般需要买会员,仅仅用一下就开个会员实在麻烦,再者批量搞起来也不方便,所以搜索了一下相关代码,代码是Python语言。

安装依赖

首先安装Python依赖

pip install pdf2image

这个Python包依赖一个poppler的二进制文件, 所以windows可以去https://github.com/oschwartz10612/poppler-windows/releases/ 下载最新的版本, 解压到某个目录,比如C:\Users\Administor\workspace\poppler-24.02.0, 然后将C:\Users\YE\workspace\poppler-24.02.0\Library\bin目录加到PATH环境变量里面。

将PDF转成多张图片

上面的准备工作完成之后就可以运行代码了,代码如下。

from os import path
from pdf2image import convert_from_path

pdf_path = "example.pdf"
filename = ".".join(path.basename(pdf_path).split(".")[:-1])
images = convert_from_path(pdf_path)

for index, image in enumerate(images):
    # 当然了,你可以可以将格式设置成其他格式, 比如png
    image.save(f'{filename}-{index}.jpg')

这样你就获得了跟PDF页数一致的一组图片。

将PDF转成一张图片

有时候我们可能还需要将这些图片合在一起,那么可以参考以下代码.

from os import path

from PIL import Image
from pdf2image import convert_from_path

pdf_path = "example.pdf"
filename = ".".join(path.basename(pdf_path).split(".")[:-1])
images = convert_from_path(pdf_path)
# 计算图片的总高度
total_height = sum([img.height for img in images])
# 计算图片的最大宽度
total_width = max([img.width for img in images])
# 创建一个空格image对象
output_image = Image.new(images[0].mode, (total_width, total_height))

upper = 0
for index, img in enumerate(images):
    # 我们以左上角作为起始点进行粘贴
    output_image.paste(img, (index, upper))
    upper += img.height

# 保存
output_image.save(f"{filename}.png")

小结

小工具用Python还是很顺手的,第三方库多且语法简单。

参考链接