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

使用pdf2image转换PDF为JPG无报错但未生成图片求助

问题描述

我正在编写一个Python脚本,用于遍历指定目录中的PDF文件,为每个PDF文件创建独立的新目录,将PDF文件转换为图片并保存为JPG格式到对应新目录中。我使用了pdf2image库,代码如下:

import os
#import main
import glob
#import cv2
import matplotlib.pyplot as plt
from pdf2image import convert_from_path
from PIL import Image

path = "C:/Users/d/Desktop/Reis/"

for file in glob.iglob(path + "*.pdf"):
    print(file)
    name = os.path.basename(file)
    filename = name.split(".")[0]
    print(filename)
    images = os.mkdir(path + filename)
    pages = convert_from_path("C:/Users/d/Desktop/Reis/Reis_Wasser_Verhaeltnis.pdf",
                              350,
                              poppler_path=r'C:/Program Files/poppler-22.04.0/Library/bin',
                              output_folder=images)

    for i in range(len(pages)):
        pages[i].save('page' + str(i) + '.jpg', 'JPEG')

但运行脚本时没有报错,却未生成任何图片。请问我忽略了哪些问题?

问题分析与解决方案

你的代码存在三个核心问题,导致图片无法正常生成:

  • os.mkdir返回值使用错误:os.mkdir()执行成功后返回None,你将其赋值给images,导致convert_from_path的output_folder参数传入无效值,该功能直接失效。正确做法是先定义目标目录路径,再执行创建操作。
  • 硬编码PDF路径:循环遍历目录下的PDF文件,但convert_from_path中写死了固定的PDF路径,没有使用循环变量file,导致脚本只会尝试处理这一个固定文件(如果该文件处理有隐藏问题,就不会生成图片)。
  • 图片保存路径错误:手动保存图片时使用相对路径,会将图片保存到脚本运行的当前工作目录,而非你新建的对应PDF目录;同时结合output_folder参数的逻辑,要么让库自动保存到目标目录,要么手动指定正确路径。

修正后的代码(自动保存版本)

利用pdf2image的output_folder和fmt参数,自动将图片保存到目标目录:

import os
import glob
from pdf2image import convert_from_path

path = "C:/Users/d/Desktop/Reis/"
poppler_path = r'C:/Program Files/poppler-22.04.0/Library/bin'

for file in glob.iglob(os.path.join(path, "*.pdf")):
    print(f"处理文件: {file}")
    # 提取不带后缀的PDF文件名
    filename = os.path.splitext(os.path.basename(file))[0]
    # 构建目标目录路径
    target_dir = os.path.join(path, filename)
    
    # 目录不存在时再创建,避免重复创建报错
    if not os.path.exists(target_dir):
        os.makedirs(target_dir)
    
    # 转换PDF为图片,自动保存到目标目录
    convert_from_path(
        file,
        dpi=350,
        poppler_path=poppler_path,
        output_folder=target_dir,
        fmt="JPEG"
    )
    
    print(f"{filename}.pdf 转换完成,图片已保存到 {target_dir}")

修正后的代码(自定义文件名版本)

如果需要自定义图片文件名(比如加上PDF名前缀),可以手动处理保存逻辑:

import os
import glob
from pdf2image import convert_from_path

path = "C:/Users/d/Desktop/Reis/"
poppler_path = r'C:/Program Files/poppler-22.04.0/Library/bin'

for file in glob.iglob(os.path.join(path, "*.pdf")):
    print(f"处理文件: {file}")
    filename = os.path.splitext(os.path.basename(file))[0]
    target_dir = os.path.join(path, filename)
    
    if not os.path.exists(target_dir):
        os.makedirs(target_dir)
    
    # 转换PDF为图片对象列表
    pages = convert_from_path(
        file,
        dpi=350,
        poppler_path=poppler_path
    )
    
    # 手动保存图片到目标目录,自定义文件名
    for idx, page in enumerate(pages):
        img_save_path = os.path.join(target_dir, f"{filename}_page_{idx+1}.jpg")
        page.save(img_save_path, "JPEG")
    
    print(f"{filename}.pdf 转换完成,图片已保存到 {target_dir}")

内容的提问来源于stack exchange,提问作者bluesky

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 07:30:55