为了实现一个具有图形用户界面的 PDF 压缩程序,可以使用 tkinter
进行界面设计,PyPDF2
用于 PDF 处理,tkinter.filedialog
用于选择文件,tkinter.ttk
用于进度条。以下是一个简单的示例代码:
import os
import tkinter as tk
from tkinter import filedialog, ttk, messagebox
from PyPDF2 import PdfWriter, PdfReader
# 压缩PDF文件
def compress_pdf(input_file, output_file, progress_callback):
reader = PdfReader(input_file)
writer = PdfWriter()
num_pages = len(reader.pages)
for i, page in enumerate(reader.pages):
writer.add_page(page)
progress_callback(i + 1, num_pages)
with open(output_file, 'wb') as f_out:
writer.write(f_out)
# 选择文件
def select_file():
file_path = filedialog.askopenfilename(
filetypes=[("PDF files", "*.pdf")])
file_entry.delete(0, tk.END)
file_entry.insert(0, file_path)
# 更新进度条
def update_progress(current, total):
progress_var.set(current / total * 100)
root.update_idletasks()
# 开始压缩
def start_compression():
input_file = file_entry.get()
if not input_file:
messagebox.showerror("Error", "Please select a PDF file")
return
output_file = os.path.join(os.path.dirname(input_file), "test.pdf")
compress_pdf(input_file, output_file, update_progress)
messagebox.showinfo("Success", f"File compressed and saved as {output_file}")
# 主窗口
root = tk.Tk()
root.title("PDF Compressor")
root.geometry("400x200")
# 文件选择部分
file_frame = tk.Frame(root)
file_frame.pack(pady=10)
file_label = tk.Label(file_frame, text="Select PDF File:")
file_label.pack(side=tk.LEFT)
file_entry = tk.Entry(file_frame, width=30)
file_entry.pack(side=tk.LEFT, padx=5)
file_button = tk.Button(file_frame, text="Browse", command=select_file)
file_button.pack(side=tk.LEFT)
# 进度条
progress_var = tk.DoubleVar()
progress_bar = ttk.Progressbar(root, variable=progress_var, maximum=100)
progress_bar.pack(pady=20, fill=tk.X, padx=20)
# 开始压缩按钮
start_button = tk.Button(root, text="Start Compression", command=start_compression)
start_button.pack(pady=10)
# 运行主循环
root.mainloop()
代码说明:
界面部分:
tk.Tk()
创建主窗口。file_frame
用于文件选择部分,包含一个标签、一个文本框(显示选择的文件路径)和一个按钮(用于浏览文件)。progress_bar
是一个进度条,用于显示压缩进度。
文件选择功能:
select_file()
使用filedialog.askopenfilename()
打开文件选择对话框,并将选择的文件路径显示在文本框中。
压缩功能:
compress_pdf()
函数负责压缩 PDF 文件,使用PdfWriter
来写入新的 PDF 文件。update_progress()
用于更新进度条。
压缩过程:
start_compression()
获取输入文件路径,调用compress_pdf()
进行压缩,并在完成后显示成功信息。
使用进度条:
- 在压缩过程中,
compress_pdf()
会定期调用progress_callback
更新进度条。
- 在压缩过程中,
依赖安装:
在运行程序之前,请确保安装了 PyPDF2
和 tkinter
(通常已内置):
bash pip install PyPDF2
此程序将选定的 PDF 文件压缩并保存为 test.pdf
,显示了压缩过程的进度条,并且用户界面友好,易于操作。