前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python提取PDF第一页为封面图片【批量提取】

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

作者头像
申霖
发布2020-02-17 11:47:14
3K0
发布2020-02-17 11:47:14
举报
文章被收录于专栏:小白程序猿小白程序猿

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

1580723527588458.jpg
1580723527588458.jpg

一、安装扩展类

代码语言: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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-02-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档