当前位置:首页 > python代码 > 正文内容

PDF文件批量删除空白页(带UI界面+成品)

王铁锹4个月前 (12-26)python代码409

一个是需要选中处理的PDF路径,一个是保存的位置
制作背景:由于有大量excel文件需要打印,合并了EXCEL再生成PDF查看格式是否发生变化,看到合并的pdf后一堆空白页,根本删不完,而且也在网上找方法大部分都是教怎么预览删除,于是就制作了批量删除空白页的小软件,刚好同事也需要,但是她没python环境,干脆用tkinter做了简单的UI,打包后文件有点大(约60M),这个也没优化了。。将就着能用!

import tkinter as tk
from tkinter import filedialog, messagebox
from tkinter.ttk import Progressbar
import pdfplumber
from PyPDF2 import PdfReader, PdfWriter
import threading
 
def is_blank_page(page):
    text = page.extract_text()
    if not text or text.isspace():
        images = [im for im in page.images]
        if len(images) == 0:
            return True
    return False
 
def remove_blank_pages(input_pdf_path, output_pdf_path, progress_var, total_pages):
    reader = PdfReader(input_pdf_path)
    writer = PdfWriter()
 
    with pdfplumber.open(input_pdf_path) as pdf:
        for i in range(len(reader.pages)):
            page = pdf.pages[i]
            if not is_blank_page(page):
                writer.add_page(reader.pages[i])
            # 更新进度条
            progress_var.set((i + 1) / total_pages * 100)
            root.update_idletasks()  # 确保界面更新
 
    with open(output_pdf_path, "wb") as output_pdf:
        writer.write(output_pdf)
 
def select_input_file():
    file_path = filedialog.askopenfilename(filetypes=[("PDF 文件", "*.pdf")])
    if file_path:
        input_entry.delete(0, tk.END)
        input_entry.insert(0, file_path)
 
def select_output_path():
    file_path = filedialog.asksaveasfilename(defaultextension=".pdf", filetypes=[("PDF 文件", "*.pdf")])
    if file_path:
        output_entry.delete(0, tk.END)
        output_entry.insert(0, file_path)
 
def process_pdf():
    input_pdf_path = input_entry.get()
    output_pdf_path = output_entry.get()
 
    if not input_pdf_path or not output_pdf_path:
        messagebox.showerror("错误", "请选择输入和输出路径。")
        return
 
    try:
        reader = PdfReader(input_pdf_path)
        total_pages = len(reader.pages)
        progress_var.set(0)  # 重置进度条
        progress_bar['maximum'] = 100
        progress_bar['value'] = 0
 
        # 使用线程避免GUI冻结
        thread = threading.Thread(target=lambda: remove_blank_pages(input_pdf_path, output_pdf_path, progress_var, total_pages))
        thread.start()
 
        # 检查线程是否完成
        def check_thread():
            if thread.is_alive():
                root.after(100, check_thread)  # 继续检查
            else:
                messagebox.showinfo("成功", "空白页移除成功!")
 
        root.after(100, check_thread)
 
    except Exception as e:
        messagebox.showerror("错误", f"发生了一个错误: {str(e)}")
 
# 创建主窗口
root = tk.Tk()
root.title("PDF 空白页移除工具")
 
# 输入文件选择
input_label = tk.Label(root, text="选择要处理的 PDF 文件:")
input_label.pack(pady=5)
input_entry = tk.Entry(root, width=50)
input_entry.pack(pady=5)
input_button = tk.Button(root, text="浏览...", command=select_input_file)
input_button.pack(pady=5)
 
# 输出文件选择
output_label = tk.Label(root, text="选择保存位置:")
output_label.pack(pady=5)
output_entry = tk.Entry(root, width=50)
output_entry.pack(pady=5)
output_button = tk.Button(root, text="浏览...", command=select_output_path)
output_button.pack(pady=5)
 
# 添加进度条
progress_var = tk.DoubleVar()
progress_bar = Progressbar(root, variable=progress_var, maximum=100)
progress_bar.pack(pady=20, fill=tk.X)
 
# 处理按钮
process_button = tk.Button(root, text="开始移除空白页", command=process_pdf)
process_button.pack(pady=20)
 
# 运行主循环
root.mainloop()


扫描二维码推送至手机访问。

微信搜索关注王铁锹公众号或者搜索王秋风。

版权声明:本文由王铁锹个人发布,如需转载请注明出处。

本文链接:https://www.3ban.cn/?id=66

“PDF文件批量删除空白页(带UI界面+成品)” 的相关文章

python代码实现网页在线flv播放小工具

python代码实现网页在线flv播放小工具

项目介绍项目名称:python代码实现网页在线flv播放小工具简介:FlvPlayer 是一个简单的在线FLV格式视频播放器,它利用Python语言开发,旨在提供一种轻量级的方式让用户能够直接通过网络浏览器播放FLV格式的视频文件。此工具特别适合那些需要快速查看或分享FLV格式视频而不想下载专门的媒...

利用python代码一秒完成指定IP端口扫描

利用python代码一秒完成指定IP端口扫描

引言”学习如何使用Python编写高效的端口扫描脚本,实现对指定IP地址的快速端口扫描。本教程提供详细的代码示例和解释,教你利用Python的强大功能在短短一秒钟内检测出目标主机上所有开放的端口。无论是网络安全测试、服务器管理还是渗透测试准备,这个Python端口扫描器都是不可或缺的工具。获取代码,...

巧用python代码生成网站sitemap地图

巧用python代码生成网站sitemap地图

引言如下:在互联网的世界里,拥有一个清晰、易于导航的网站地图(sitemap)对于网站的成功至关重要。网站地图不仅有助于用户更好地了解网站结构,还能极大地提升搜索引擎优化(SEO)因为它为搜索引擎爬虫提供了发现和索引页面的有效途径。通过提供一个全面且更新及时的网站地图,我们可以确保搜索引擎能够快速找...

利用python导入flv文本链接随机构造一组网页播放

利用python导入flv文本链接随机构造一组网页播放

引言如下通过导入本地文件夹内的文本,引入链接调用python代码开放5000端口进行网页的flv随机播放,这个代码常用于随机测试flv的直播播放设置,亦或者监控等领域....软件规划如下FLV Video Player 是一个基于Web的简易视频播放器应用,使用Python的Flask框架构建。为用...

巧妙调用接口来判断ip地址

巧用一个使用 Python 发起 HTTPS 请求的例子,旨在获取指定 IP 地址的相关信息!请勿用于生产测试环境!import urllib.request import ssl # 定义请求的URL、方法、应用代码(API密钥)以及查询参数 host&nb...

Python脚本实现自动检测并重命名非正常图片文件

Python脚本实现自动检测并重命名非正常图片文件

概述在日常的文件管理和数据处理中,我们可能会遇到一些文件名虽然以特定扩展名结尾,但实际内容并不符合该格式的情况。例如,某些文件可能被错误地标记为 .jpg 文件,但实际上它们可能是其他类型的文件,如视频文件。这种情况下,如果我们依赖文件扩展名来处理文件,就可能导致程序出现错误或无法正确处理文件。本文...