Python提取PDF第一页为封面图片【批量提取】

2020-02-17 11:47:14 浏览数 (1)

近期要处理一批PDF文件,大约在20G,具体数量不详,需求是把每个文件的页数和第一页转换成图片,在网上查阅各种类库,最终选择的是PyMuPDF模块。最后核心代码量较少,功能实现效果也比较好。

一、安装扩展类

代码语言:javascript复制
pip install PyMuPDF

二、示例代码

代码语言:javascript复制
# coding:utf-8
import os
import fitz


# 解析
def analysis(file_path, save_path, num):
    # 资源列表
    file_array = []
    if os.path.isdir(file_path):
        # 目录循环压入
        file_count = get_path_file(file_path)
        for v in file_count:
            file_array.append(v)
    else:
        # 单文件,单次调用
        file_array.append(file_path)

    # 判断为空情况
    if not file_array:
        print("此目录下无文件")
    # 执行解析
    file_count_num = len(file_array)
    print("程序运行中,共计%s个文件" % file_count_num)
    for v in file_array:
        # print("文件路径:%s" % v)
        # 获取文件名称及类型
        file_name = os.path.basename(v)
        # print("文件信息:%s" % file_name)
        if '.pdf' not in file_name:
            print("此文件非PDF文件")
        #  打开PDF文件,生成一个对象
        doc = fitz.open(v)
        # 总页数
        count_page = doc.pageCount
        # print("文件共计:%s页" % count_page)
        if count_page > 1:
            page = doc[num]
            rotate = int(0)
            # 每个尺寸的缩放系数为2,这将为我们生成分辨率提高四倍的图像。
            zoom_x = 2.0
            zoom_y = 2.0
            trans = fitz.Matrix(zoom_x, zoom_y).preRotate(rotate)
            pm = page.getPixmap(matrix=trans, alpha=False)
            # 保存路径
            p_1 = v.replace(file_path, save_path)
            p_2 = p_1.replace(file_name, '')
            if not os.path.exists(p_2):
                os.makedirs(p_2)
            new_file_name = file_name.replace(".pdf", "")
            pm.writePNG(p_2   '%s.png' % new_file_name)
            print("运行完成")
        else:
            print("此文档无内容,跳出")
            continue


# 返回目录下所有文件
def get_path_file(files_path):
    data = []
    for root, dirs, files in os.walk(files_path, topdown=False):
        for name in files:
            f_p = os.path.join(root, name).replace("\", "/")
            data.append(f_p)
    return data


if __name__ == '__main__':
    print("|---------------------------------|")
    print("|                                 |")
    print("|         PDF 批量生成封面        |")
    print("|                                 |")
    print("|---------------------------------|")

    # 当前目录下的文件
    now_path = os.getcwd()
    print("当前位置:%s" % now_path)
    # 保存路径
    print("请输入参数,以 / 结尾,处理完成后会自动退出")
    save_path = input("图片保存地址:")
    exit()
    # 判断目录
    save_path_status = os.path.exists(save_path)
    if not save_path_status:
        os.mkdir(save_path)
    # 截取页数
    num = 0
    # 路径或文件名
    file_path = input("PDF文件地址:")
    # 调用方法
    analysis(file_path, save_path, num)

三、说明

1、使用input输入路径

2、生成图片存户路径同存放路径

3、生成图片为PNG格式

4、支持自定义截取页数,建议为第一页

5、已生成exe文件,百度网盘:

链接:https://pan.baidu.com/s/1gstUKiLnmkXzjTimU7I29Q 

提取码:y9cz

0 人点赞