EasyGUI+PyDF2应用小示例—PDF页面提取应用程序

简介: EasyGUI+PyDF2应用小示例—PDF页面提取应用程序

EasyGUI+PyDF2应用小示例—PDF页面提取应用程序
最近撸一本Python的学习书籍,有这样的一个应用小示例,就是利用EasyGUI编写一个从PDF中提取页面的GUI程序。

具体要求如下:

(1)请求用户选择要打开的PDF文件

(2)如果用户没有选择PDF文件,则退出程序

(3)请求用户输入起始页码

(4)如果用户没有输入起始页码,则退出程序 (

(5)合法的页码应当是整数,如果用户输入了不合法的页码:

警告用户输入的页码不合法;

回到第(3)步

(6)请求用户输入结束页码

(7)如果用户没有输入结束页码,则退出程序

(8)合法的页码应当是整数。如果用户输入了不合法的页码:

警告用户输入的页码不合法 回到第(6)步

(9)询问提取出来的页面的保存位置

(10)如果用户没有选择保存位置,则退出程序

(11)如果用户选择了和输入文件路径相同的位置:

警告用户不允许覆盖输入文件 回到第(9)步

(12)进行页面提取: 打开输入的PDF文件 将指定范围内的页面提取出来,写入新的PDF文件中。

简单ASCII流程图示例

+-------------------------+
|         开始             |
+-------------------------+
           |
           v
+-------------------------+
| 请求用户选择PDF文件       |
+-------------------------+
           |
        +--+--+
        |     |
      选择   不选择
        |     |
        v     v
+-----------------+    +-----------------+
| 输入用户输入的    |     |    退出程序     |
|    起始页码      |     +-----------------+
+-----------------+
           |
      +----+-----+
      |          |
   输入合法?      |
      |          |
     是          否
      |          |
      v          v
+-----------------+
| 输入用户输入的    |
|    结束页码      |
+-----------------+
           |
      +----+-----+
      |          |
   输入合法?      |
      |          |
     是          否
      |          |
      v          v
+-----------------+
| 询问保存位置      |
+-----------------+
           |
      +----+-----+
      |          |
    选择       不选择
      |          |
      v          v
+-----------------+    +-----------------+
| 保存位置与输入    |    |    退出程序      |
| 文件相同?       |     +-----------------+
+-----------------+
           |
      +----+-----+
      |          |
      是         否
      |          |
      v          v
+-----------------+
|    提取页面      |
+-----------------+
           |
+-----------------+
| 显示完成消息      |
+-----------------+
           |
+-----------------+
|        结束      |
+-----------------+

源码如下:

import easygui as eg
from PyPDF2 import PdfReader, PdfWriter


def main():
    # 请求用户选择要打开的PDF文件
    pdf_file = eg.fileopenbox(msg="选择要打开的PDF文件", title="选择PDF", default="*.pdf")
    if not pdf_file:
        eg.msgbox("未选择文件,程序退出。")
        return

    # 请求用户输入起始页码
    while True:
        start_page_str = eg.enterbox("请输入起始页码(整数):", title="输入起始页码")
        if not start_page_str:
            eg.msgbox("未输入起始页码,程序退出。")
            return
        try:
            start_page = int(start_page_str) - 1  # 转换为0索引
            break
        except ValueError:
            eg.msgbox("输入的页码不合法,请重新输入!")

    # 请求用户输入结束页码
    while True:
        end_page_str = eg.enterbox("请输入结束页码(整数):", title="输入结束页码")
        if not end_page_str:
            eg.msgbox("未输入结束页码,程序退出。")
            return
        try:
            if int(end_page_str) >= int(start_page_str):
                end_page = int(end_page_str)  # 不用减1,因为结束页是包含的
                break
            else:
                eg.msgbox("结束页码不能小于起始页码!!!")
        except ValueError:
            eg.msgbox("输入的页码不合法,请重新输入!")

    # 询问提取出来的页面的保存位置
    while True:
        save_path = eg.filesavebox(msg="选择保存提取后的PDF文件的位置", title="保存PDF", default="*.pdf")
        if not save_path:
            eg.msgbox("未选择保存位置,程序退出。")
            return
        if save_path == pdf_file:
            eg.msgbox("不允许覆盖输入文件,请选择其他位置!")
        else:
            break

    # 进行页面提取
    try:
        with open(pdf_file, 'rb') as infile:
            reader = PdfReader(infile)
            writer = PdfWriter()

            # 检查页码范围有效性
            total_pages = len(reader.pages)
            if start_page < 0 or end_page > total_pages or start_page >= end_page:
                eg.msgbox(f"页码范围不合法:总页数为 {total_pages}。")
                return

            for page_num in range(start_page, end_page):
                writer.add_page(reader.pages[page_num])

            # 保存提取的PDF
            with open(save_path, 'wb') as outfile:
                writer.write(outfile)

        eg.msgbox("页面提取完成!")

    except Exception as e:
        eg.msgbox(f"发生错误:{str(e)}")


if __name__ == "__main__":
    main()

原创不易,欢迎关注、点赞、转发!!!

相关文章
|
3月前
|
Python
Python办公自动化:删除任意页数pdf页面
Python办公自动化:删除任意页数pdf页面
108 1
Python办公自动化:删除任意页数pdf页面
|
2月前
|
索引 Python
PDF文件页面提取操作小指南
PDF文件页面提取操作小指南
91 4
|
2月前
|
Python
Python对PDF文件页面的旋转和切割
Python对PDF文件页面的旋转和切割
51 3
|
2月前
|
人工智能 计算机视觉 Python
ChatGPT编程省钱、方便小示例——实现PDF转成PNG文件
ChatGPT编程省钱、方便小示例——实现PDF转成PNG文件
36 1
|
4月前
|
C# 开发者 Windows
WPF与PDF文档:解锁创建和编辑PDF文件的新技能——从环境配置到代码实践,手把手教你如何在WPF应用中高效处理PDF,提升文档管理效率
【8月更文挑战第31天】随着数字文档的普及,PDF因跨平台兼容性和高保真度成为重要格式。WPF虽不直接支持PDF处理,但借助第三方库(如iTextSharp)可在WPF应用中实现PDF的创建与编辑。本文通过具体案例和示例代码,详细介绍了如何在WPF中集成PDF库,并展示了从设计用户界面到实现PDF创建与编辑的完整流程。不仅包括创建新文档的基本步骤,还涉及在现有PDF中添加页眉页脚等高级功能。通过这些示例,WPF开发者可以更好地掌握PDF处理技术,提升应用程序的功能性和实用性。
179 0
|
5月前
|
分布式计算 大数据 Spark
Spark大数据处理:技术、应用与性能优化(全)PDF书籍推荐分享
《Spark大数据处理:技术、应用与性能优化》深入浅出介绍Spark核心,涵盖部署、实战与性能调优,适合初学者。作者基于微软和IBM经验,解析Spark工作机制,探讨BDAS生态,提供实践案例,助力快速掌握。书中亦讨论性能优化策略。[PDF下载链接](https://zhangfeidezhu.com/?p=347)。![Spark Web UI](https://img-blog.csdnimg.cn/direct/16aaadbb4e13410f8cb2727c3786cc9e.png#pic_center)
164 1
Spark大数据处理:技术、应用与性能优化(全)PDF书籍推荐分享
|
5月前
|
开发框架 前端开发 JavaScript
在Winform程序中使用Spire.Pdf实现页面添加印章处理
在Winform程序中使用Spire.Pdf实现页面添加印章处理
|
6月前
|
前端开发 JavaScript API
技术笔记:vue+pdfh5实现将pdf渲染到页面上
技术笔记:vue+pdfh5实现将pdf渲染到页面上
|
7月前
|
前端开发 文件存储 Python
python之xhtml2pdf: HTML转PDF工具示例详解
python之xhtml2pdf: HTML转PDF工具示例详解
545 0
|
存储
Photoshop合并多个图片为PDF格式文件的(PDF文件编辑删除页面及合并的操作方法)解决方案
Photoshop合并多个图片为PDF格式文件的(PDF文件编辑删除页面及合并的操作方法)解决方案
283 0