前言
因为在平时工作中需要将pdf转换为jpg,但wps转换需要会员,通过线上转换又略有些麻烦,所以写了一个简单的程序实现pdf转换为jpg。
代码环境
代码环境:
Python 3.11.7
tkinter # Tkinter是Python的标准GUI库
pymupdf # 用于处理PDF文件
os # 操作系统相关的功能
主要函数
转换PDF到JPG
# 定义函数:转换PDF到JPG
def convert_pdf_to_jpg():
"""读取PDF文件路径和输出目录,使用fitz库转换PDF页面为JPG并保存"""
pdf_path = pdf_entry.get() # 获取PDF文件路径
output_folder = output_entry.get() # 获取输出目录路径
# 检查文件和目录是否存在
if not os.path.isfile(pdf_path) or not os.path.isdir(output_folder):
result_label.config(text="请确保PDF文件路径有效且已选择输出目录!") # 显示错误信息
return
try:
doc = fitz.open(pdf_path) # 打开PDF文件
for page_num in range(len(doc)): # 遍历每一页
page = doc.load_page(page_num) # 加载页面
pix = page.get_pixmap(matrix=fitz.Matrix(300/72, 300/72)) # 获取页面图像,这里设置分辨率为300 DPI
output_filename = os.path.join(output_folder, f"page_{page_num+1}.jpg") # 构造输出文件名
pix.save(output_filename) # 保存为JPG
result_label.config(text=f"转换完成,图片已保存至{output_folder}") # 显示成功信息
except Exception as e: # 如果转换过程中出现异常
result_label.config(text=f"转换过程中发生错误:{str(e)}") # 显示错误信息
选择PDF文件
# 定义函数:选择PDF文件
def select_pdf_file():
"""打开文件对话框,让用户选择一个PDF文件,然后将路径显示在输入框中"""
pdf_path = filedialog.askopenfilename(filetypes=[("PDF Files", "*.pdf")]) # 只显示PDF文件
pdf_entry.delete(0, tk.END) # 清空输入框当前内容
pdf_entry.insert(0, pdf_path) # 插入用户选择的PDF文件路径
选择输出文件夹
# 定义函数:选择输出文件夹
def select_output_folder():
"""打开目录对话框,让用户选择一个输出目录,然后将路径显示在输入框中"""
output_folder = filedialog.askdirectory() # 让用户选择目录
output_entry.delete(0, tk.END) # 清空输入框当前内容
output_entry.insert(0, output_folder) # 插入用户选择的输出目录路径
GUI代码实现
# 创建主窗口
app = tk.Tk() # 初始化Tkinter应用程序
app.title("PDF转JPG工具") # 设置窗口标题
# 添加PDF文件路径输入框及选择按钮
tk.Label(app, text="PDF文件路径:").pack() # 显示标签
pdf_entry = tk.Entry(app, width=50) # 创建输入框,宽度设为50
pdf_entry.pack(pady=5) # 布局输入框,上下填充5像素
tk.Button(app, text="选择PDF文件", command=select_pdf_file).pack() # 创建并布局选择按钮
# 同理添加输出目录输入框及选择按钮
tk.Label(app, text="输出目录:").pack()
output_entry = tk.Entry(app, width=50)
output_entry.pack(pady=5)
tk.Button(app, text="选择输出文件夹", command=select_output_folder).pack()
# 添加转换按钮
tk.Button(app, text="开始转换", command=convert_pdf_to_jpg).pack(pady=10) # 创建并布局转换按钮
# 添加结果提示标签
result_label = tk.Label(app, text="", wraplength=300) # 创建标签,用于显示转换结果,wraplength限制文本换行长度
result_label.pack(pady=10) # 布局标签
# 启动GUI主循环
app.mainloop() # 开始事件循环,等待用户交互
总体代码
# 导入所需的库
import tkinter as tk # Tkinter是Python的标准GUI库
from tkinter import filedialog # 提供文件对话框功能
import os # 操作系统相关的功能,如检查文件是否存在
import fitz # pymupdf库的别名,用于处理PDF文件
# 定义函数:选择PDF文件
def select_pdf_file():
"""打开文件对话框,让用户选择一个PDF文件,然后将路径显示在输入框中"""
pdf_path = filedialog.askopenfilename(filetypes=[("PDF Files", "*.pdf")]) # 只显示PDF文件
pdf_entry.delete(0, tk.END) # 清空输入框当前内容
pdf_entry.insert(0, pdf_path) # 插入用户选择的PDF文件路径
# 定义函数:选择输出文件夹
def select_output_folder():
"""打开目录对话框,让用户选择一个输出目录,然后将路径显示在输入框中"""
output_folder = filedialog.askdirectory() # 让用户选择目录
output_entry.delete(0, tk.END) # 清空输入框当前内容
output_entry.insert(0, output_folder) # 插入用户选择的输出目录路径
# 定义函数:转换PDF到JPG
def convert_pdf_to_jpg():
"""读取PDF文件路径和输出目录,使用fitz库转换PDF页面为JPG并保存"""
pdf_path = pdf_entry.get() # 获取PDF文件路径
output_folder = output_entry.get() # 获取输出目录路径
# 检查文件和目录是否存在
if not os.path.isfile(pdf_path) or not os.path.isdir(output_folder):
result_label.config(text="请确保PDF文件路径有效且已选择输出目录!") # 显示错误信息
return
try:
doc = fitz.open(pdf_path) # 打开PDF文件
for page_num in range(len(doc)): # 遍历每一页
page = doc.load_page(page_num) # 加载页面
pix = page.get_pixmap(matrix=fitz.Matrix(300/72, 300/72)) # 获取页面图像,这里设置分辨率为300 DPI
output_filename = os.path.join(output_folder, f"page_{page_num+1}.jpg") # 构造输出文件名
pix.save(output_filename) # 保存为JPG
result_label.config(text=f"转换完成,图片已保存至{output_folder}") # 显示成功信息
except Exception as e: # 如果转换过程中出现异常
result_label.config(text=f"转换过程中发生错误:{str(e)}") # 显示错误信息
# 创建主窗口
app = tk.Tk() # 初始化Tkinter应用程序
app.title("PDF转JPG工具") # 设置窗口标题
# 添加PDF文件路径输入框及选择按钮
tk.Label(app, text="PDF文件路径:").pack() # 显示标签
pdf_entry = tk.Entry(app, width=50) # 创建输入框,宽度设为50
pdf_entry.pack(pady=5) # 布局输入框,上下填充5像素
tk.Button(app, text="选择PDF文件", command=select_pdf_file).pack() # 创建并布局选择按钮
# 同理添加输出目录输入框及选择按钮
tk.Label(app, text="输出目录:").pack()
output_entry = tk.Entry(app, width=50)
output_entry.pack(pady=5)
tk.Button(app, text="选择输出文件夹", command=select_output_folder).pack()
# 添加转换按钮
tk.Button(app, text="开始转换", command=convert_pdf_to_jpg).pack(pady=10) # 创建并布局转换按钮
# 添加结果提示标签
result_label = tk.Label(app, text="", wraplength=300) # 创建标签,用于显示转换结果,wraplength限制文本换行长度
result_label.pack(pady=10) # 布局标签
# 启动GUI主循环
app.mainloop() # 开始事件循环,等待用户交互
使用效果
(GUI效果)选择PDF文件,并选择输出文件夹,点击开始转换,即可将pdf转换为jpg