Python PDF批量转图片工具
1.简介:
这是一个简单易用的PDF转图片工具,主要功能:
- 可以批量处理多个PDF文件
- 可以选择需要转换的具体页面
- 支持两种设置方式:
- 统一设置:所有PDF使用相同的页码
- 单独设置:每个PDF单独设置页码
使用方法:
- 点击"选择文件夹",选择PDF所在文件夹
- 选择设置方式并输入要转换的页码
例如:1,2,3 或 1-5 或 1,3-5 - 点击"开始转换"即可
转换后的图片会自动保存在原PDF所在目录下的"文件名_images"文件夹中
2.运行效果:
3.相关源码:
import tkinter as tk
from tkinter import ttk, filedialog, messagebox
import os
import fitz
import threading
from queue import Queue
import gc
from typing import Dict, List
class PDFConverter:
def __init__(self):
self.root = tk.Tk()
self.root.title("PDF批量转图片工具")
self.root.geometry("900x700")
# 存储PDF文件和对应的页码设置
self.pdf_settings: Dict[str, List[int]] = {
}
# 创建工作队列
self.work_queue = Queue()
self.setup_ui()
def setup_ui(self):
# 文件夹选择框
folder_frame = ttk.Frame(self.root)
folder_frame.pack(fill=tk.X, padx=5, pady=5)
self.folder_path = tk.StringVar()
ttk.Entry(folder_frame, textvariable=self.folder_path).pack(side=tk.LEFT, fill=tk.X, expand=True)
ttk.Button(folder_frame, text="选择文件夹", command=self.select_folder).pack(side=tk.RIGHT)
# 添加帮助按钮
help_frame = ttk.Frame(self.root)
help_frame.pack(fill=tk.X, padx=5)
ttk.Button(help_frame, text="使用帮助", command=self.show_help).pack(side=tk.RIGHT)
# 设置模式选择
self.mode_frame = ttk.LabelFrame(self.root, text="设置模式")
self.mode_frame.pack(fill=tk.X, padx=5, pady=5)
self.setting_mode = tk.StringVar(value="batch")
ttk.Radiobutton(self.mode_frame, text="统一设置", variable=self.setting_mode,
value="batch", command=self.toggle_setting_mode).pack(side=tk.LEFT, padx=10)
ttk.Radiobutton(self.mode_frame, text="单独设置", variable=self.setting_mode,
value="individual", command=self.toggle_setting_mode).pack(side=tk.LEFT, padx=10)
# 统一设置页码框架
self.batch_setting_frame = ttk.LabelFrame(self.root, text="统一页码设置")
self.batch_setting_frame.pack(fill=tk.X, padx=5, pady=5)
ttk.Label(self.batch_setting_frame, text="页码格式(例如: 1,2,3-5):").pack(side=tk.LEFT)
self.batch_pages = ttk.Entry(self.batch_setting_frame)
self.batch_pages.pack(side=tk.LEFT, fill=tk.X, expand=True, padx=5)
ttk.Button(self.batch_setting_frame, text="应用", command=self.apply_batch_settings).pack(side=tk.RIGHT)
# 控制按钮面板(移到页码设置下面)
control_frame = ttk.Frame(self.root)
control_frame.pack(fill=tk.X, padx=5, pady=5)
# 转换按钮和进度条
ttk.Button(control_frame, text="开始转换", command=self.start_conversion).pack(side=tk.LEFT, padx=5)
self.progress = ttk.Progressbar(control_frame, mode='determinate')
self.progress.pack(side=tk.LEFT, fill=tk.X, expand<