You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 10:54:01