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

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

王铁锹6个月前 (12-26)python代码786

一个是需要选中处理的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代码生成网站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...

PHP脚本获取客户端IP地址和解析设备信息

PHP脚本获取客户端IP地址和解析设备信息

在互联网应用中,了解访问者的信息对于网站分析、用户行为跟踪以及安全控制等方面非常重要。PHP是一种广泛使用的服务器端脚本语言,它提供了多种方法来收集和处理来自客户端的数据。下面的代码片段展示了两个PHP函数,它们分别用于获取客户端的IP地址和解析用户的设备信息(包括操作系统和浏览器)。获取客户端IP...

vivo云服务照片视频批量下载代码~

vivo云服务照片视频批量下载代码~

起因,想要从vivo云服务中下载历史上传四五千张照片,结果点击全选之后,居然要我一张一张下载,需要我不停的点保存,这就很抽象了,难道我想要的批量下载不应该是打包成压缩包或者直接批量下载到文件夹中嘛?这点厂商做的甚至不如云盘,细节一点也没打磨!!!第一步打开vivo云服务官网,进入主页,打开控制台进行...