使用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
相关产品推荐
相关产品推荐

