判断本地pdf是否存在图片-进阶

import datetime
import time
import fitz
import os
import re


def traverse_folder(folder_path):
    """
    此函数用于遍历指定文件夹及其子文件夹中的文件,并打印每个文件的完整路径
    参数:
    folder_path (str): 要遍历的文件夹路径
    """
    # 使用 os.walk 函数递归地遍历文件夹及其子文件夹
    for root, dirs, files in os.walk(folder_path):
        """
        root: 当前正在遍历的文件夹的路径
        dirs: 当前文件夹下的子文件夹列表
        files: 当前文件夹下的文件列表
        """
        for file in files:
            # 通过 os.path.join 函数将当前文件夹路径和文件名组合成完整的文件路径
            file_path = os.path.join(root, file)
            # 打印文件的完整路径
            print(file_path)
            return file_path  # 这里的 return 会导致函数在第一次遍历到文件时就立即返回,只会处理一个文件,通常遍历函数不会这么早返回


def has_images_in_pdf(file_path, folder_path):
    """
    此函数用于检查给定的 PDF 文件路径中是否存在图片,并将图片保存到指定路径
    参数:
    pdf_path (str): 要检查的 PDF 文件的路径
    save_path (str): 保存图片的目录路径
    """
    # 打开 PDF 文件
    pdf_document = fitz.open(file_path)
    has_image = False  # 初始化标志,用于表示是否存在图片

    for page_num in range(pdf_document.page_count):
        """
        遍历 PDF 文件的每一页
        """
        # 获取当前页
        page = pdf_document[page_num]
        # 获取当前页的所有图片信息
        image_list = page.get_images(full=True)
        if image_list:
            """
            如果当前页存在图片
            """
            has_image = True  # 将标志设置为 True
            for img_index, img_info in enumerate(image_list, start=1):
                """
                遍历当前页的每一张图片
                """
                # 获取图片的 xref 值
                xref = img_info[0]
                # 提取图片的详细信息
                base_image = pdf_document.extract_image(xref)
                # 获取图片的数据
                image_data = base_image["image"]
                # 获取图片的扩展名
                image_ext = base_image["ext"]

                # 格式化时间
                time_bt = datetime.datetime.now().strftime("%Y%m%d%H%M%S%f")[:-3]

                # 构建图片的保存名称
                image_name = f"page_{page_num + 1}_img_{img_index}_{time_bt}.{image_ext}"
                # 构建图片的完整保存路径
                image_path = os.path.join(folder_path, image_name)
                # 以二进制写入模式打开文件并保存图片数据
                with open(image_path, "wb") as img_file:
                    img_file.write(image_data)
            break  # 一旦找到图片,就不再检查后续页面
    # 关闭 PDF 文件
    pdf_document.close()
    return has_image  # 返回是否存在图片的标志


folder_path = r"D:\360安全浏览器下载\验证图片识别"  # 保存图片的目录路径


if has_images_in_pdf(traverse_folder(folder_path), folder_path):
    print("PDF 文件中存在图片,并已保存到指定位置")
else:
    print("PDF 文件中不存在图片")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值