Python实现PDF文件转图片(PNG,JPEG等格式)

介绍

这篇博客目的主要是使用Python实现PDF文件转换成图片,以方便下游任务的进行。

开发包

  • fitz
  • PyMuPDF

在控制台依次执行以下命令:

pip install fitz
pip install PyMuPDF

详细代码

参数说明:

  • pdfPath:pdf文件的路径
  • imgPath:图像要保存的文件夹
  • zoom_x:x方向的缩放系数
  • zoom_y:y方向的缩放系数
  • rotation_angle:旋转角度
def pdf_image(pdfPath, imgPath, zoom_x, zoom_y, rotation_angle):
    # 打开PDF文件
    pdf = fitz.open(pdfPath)
    # 逐页读取PDF
    for pg in range(0, pdf.pageCount):
        page = pdf[pg]
        # 设置缩放和旋转系数
        trans = fitz.Matrix(zoom_x, zoom_y).preRotate(rotation_angle)
        pm = page.getPixmap(matrix=trans, alpha=False)
        # 开始写图像
        pm.writePNG(imgPath + str(pg) + ".png")
    pdf.close()


pdf_image(r"01.pdf", r"images/", 10, 10, 0)

运行以上代码,最终将会以PDF文件的页码为单位生成图片。

图片格式

如果你想自己选择最终的图片格式,只需要修改以下代码:
pm.writePNG(imgPath + str(pg) + ".png")
.png修改为你期望的图片格式,比如.jpg等即可

批量转换PDF文件

步骤说明:

  1. 新建pdf2image.py文件并将以下代码复制并保存。
  2. 在与pdf2image.py文件同目录下创建pdfsimages文件夹。
  3. 将所有需要转换的PDF文件放入pdfs文件夹下。
  4. 运行pdf2image.py,等待运行完成即可。

代码如下:

import fitz
import os


def mkdir(path):
    folder = os.path.exists(path)
    if not folder:  # 判断是否存在文件夹如果不存在则创建为文件夹
        os.makedirs(path)  # makedirs 创建文件时如果路径不存在会创建这个路径
    else:
        pass


def pdf_image(pdfPath, imgPath, zoom_x, zoom_y, rotation_angle):
    """
    :param pdfPath: pdf文件的路径
    :param imgPath: 图像要保存的文件夹
    :param zoom_x: x方向的缩放系数
    :param zoom_y: y方向的缩放系数
    :param rotation_angle: 旋转角度
    :return: None
    """
    # 打开PDF文件
    pdf = fitz.open(pdfPath)
    name = pdf.name
    name = name.replace('pdfs/', '').replace('.pdf', '')
    # 逐页读取PDF
    for pg in range(0, pdf.pageCount):
        page = pdf[pg]
        # 设置缩放和旋转系数
        trans = fitz.Matrix(zoom_x, zoom_y).preRotate(rotation_angle)
        pm = page.getPixmap(matrix=trans, alpha=False)
        # 开始写图像
        mkdir(imgPath + name)
        pm.writePNG(imgPath + name + '/' + str(pg + 1) + ".png")
    pdf.close()


# pdf_image(r"pdfs/01.pdf", r"images/", 10, 10, 0)

file_dir = r'pdfs/'
file_list = []
for items in os.walk(file_dir, topdown=False):
    file_list = items[2]
print(file_list)

for file in file_list:
    head = 'pdfs/'
    pdf_image(head + file, r"images/", 5, 5, 0)

  • 12
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值