使用Wand批量转换目录PDF为图像时仅单个文件生效问题求助
批量PDF转图片代码修复方案
原代码核心问题
- 路径拼接错误:
os.listdir(src_path)仅返回文件名,判断是否为目录、加载PDF文件时未拼接源目录路径,导致仅当前工作目录下的PDF能被识别 - 语法错误:捕获
PdfReadError的except分支后无任何执行逻辑,不符合Python语法要求 - 变量未初始化:
count变量未定义就执行自增操作,运行会直接抛出异常 - 保存文件冲突:多PDF转换时仅用页码命名jpg文件,后续PDF的输出会覆盖之前的同名文件
- 输出路径错误:未将生成的图片写入指定的目标目录,全部输出到脚本运行的当前目录
修复后可运行代码
import os import argparse import PyPDF2 from wand.image import Image as wi # 初始化参数解析 parser = argparse.ArgumentParser(description="批量将PDF转换为JPG图片") parser.add_argument("--src_dir", required=True, help="存放PDF的源目录路径") parser.add_argument("--trg_dir", required=True, help="输出图片的目标目录路径") args = parser.parse_args() src_path = args.src_dir target_path = args.trg_dir # 初始化计数变量 count = 0 # 目标目录不存在则自动创建 os.makedirs(target_path, exist_ok=True) for filename in os.listdir(src_path): count += 1 # 拼接文件完整路径 full_file_path = os.path.join(src_path, filename) # 跳过子目录 if os.path.isdir(full_file_path): continue # 校验是否为有效PDF文件 try: PyPDF2.PdfFileReader(open(full_file_path, "rb")) except PyPDF2.utils.PdfReadError: # 非PDF文件直接跳过 continue else: # 加载完整路径的PDF文件 pdf = wi(filename=full_file_path, resolution=300) pdfimage = pdf.convert("jpeg") i = 1 for img in pdfimage.sequence: page = wi(image=img) # 拼接输出路径,用原PDF文件名+页码命名,避免文件覆盖 save_name = f"{os.path.splitext(filename)[0]}_page_{i}.jpg" save_full_path = os.path.join(target_path, save_name) page.save(filename=save_full_path) i += 1
使用说明
- 运行时传入源目录和目标目录参数即可,示例命令:
python pdf2img.py --src_dir ./pdfs --trg_dir ./output_imgs - 输出图片会自动以
原PDF文件名_page_页码.jpg格式命名,不会出现覆盖问题 - 会自动跳过非PDF文件和子目录,仅处理源目录下的有效PDF文件
内容的提问来源于stack exchange,提问作者user15235831
相关产品推荐
相关产品推荐

