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 文件中不存在图片")
判断本地pdf是否存在图片-进阶
最新推荐文章于 2024-09-26 16:23:21 发布