返回顶部
首页 > 资讯 > 后端开发 > Python >Python怎么编写PDF拆分工具
  • 431
分享到

Python怎么编写PDF拆分工具

2023-06-29 14:06:22 431人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章主要介绍“python怎么编写pdf拆分工具”,在日常操作中,相信很多人在Python怎么编写PDF拆分工具问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python怎么编写PDF拆分工具”的疑惑有所

这篇文章主要介绍“python怎么编写pdf拆分工具”,在日常操作中,相信很多人在Python怎么编写PDF拆分工具问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python怎么编写PDF拆分工具”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

需求

需要从 PDF 中取出几页并将其保存为新的 PDF,为了后期使用方便,这个工具需要做成傻瓜式的带有 GUI 页面的形式

Python怎么编写PDF拆分工具

选择源 pdf 文件,再指定下生成的新的 pdf 文件名称及保存位置,和需要拆分的 page 信息,就可以得到新的 pdf 文件了

需求解析

对于 Python GUI,我们有太多种选择了,下面我们先来横向的简单对比下

从高层次上看,大的 GUI 工具有:

不过今天,我们选择的工具是 appjar,这是一个由一位从事教育工作的大神发明的,所以它可以提供一个更加简单的 GUI 创建过程,而且是完全基于 Tkinter 的,Python 默认支持

代码实现

首先为了实现 PDF 操作,我这里选择了 pypdf2 库

我们先硬编码一个输入输出的示例

from PyPDF2 import PdfFileWriter, PdfFileReaderinfile = "Input.pdf"outfile = "Output.pdf"page_range = "1-2,6"

接下来我们实例化 PdfFileWriter 和 PdfFIleReader 对象,并创建实际的 Output.pdf 文件

output = PdfFileWriter()input_pdf = PdfFileReader(open(infile, "rb"))output_file = open(outfile, "wb")

下面一个比较复杂的点就是需要拆分 pdf,提取页面并保存在列表中

page_ranges = (x.split("-") for x in page_range.split(","))range_list = [i for r in page_ranges for i in range(int(r[0]), int(r[-1]) + 1)]

最后就是从原始文件中拷贝内容到新的文件

for p in range_list:    output.addPage(input_pdf.getPage(p - 1))output.write(output_file)

下面来构建 GUI 界面

对于这个拆分 PDF 的小工具,需要具有如下功能:

  • 可以通过标准文件浏览器选择 pdf 文件

  • 可以选择输出文件的位置及文件名称

  • 可以自定义提取哪些页面

  • 有一些错误检查

通过 PIP 安装好 appJar 后,我们就可以编码了

from appJar import guifrom PyPDF2 import PdfFileWriter, PdfFileReaderfrom pathlib import Path

创建 GUI 窗口

app = gui("PDF Splitter", useTtk=True)app.setTtkTheme("default")app.setSize(500, 200)

这里我使用了默认主题,当然也可以切换各种各样的主题模式

Python怎么编写PDF拆分工具

下面是添加标签和数据输入组件

app.addLabel("Choose Source PDF File")app.addFileEntry("Input_File")app.addLabel("Select Output Directory")app.aDDDirectoryEntry("Output_Directory")app.addLabel("Output file name")app.addEntry("Output_name")app.addLabel("Page Ranges: 1,3,4-10")app.addEntry("Page_Ranges")

接下来添加按钮,“处理”和“退出”,按下按钮,调用如下函数

app.addButtons(["Process", "Quit"], press)

最后就是运行这个 app 啦

# start the GUIapp.Go()

这样我们就完成了 GUI 的搭建,下面编写内部处理逻辑。程序读取任何输入,判断是否为 PDF,并拆分

def press(button):    if button == "Process":        src_file = app.getEntry("Input_File")        dest_dir = app.getEntry("Output_Directory")        page_range = app.getEntry("Page_Ranges")        out_file = app.getEntry("Output_name")        errors, error_msg = validate_inputs(src_file, dest_dir, page_range, out_file)        if errors:            app.errorBox("Error", "\n".join(error_msg), parent=None)        else:            split_pages(src_file, page_range, Path(dest_dir, out_file))    else:        app.stop()

如果单击 “处理(Process)”按钮,则调用 app.getEntry() 检索输入值,每个值都会被存储,然后通过调用 validate_inputs() 进行验证

来看看 validate_inputs 函数

def validate_inputs(input_file, output_dir, range, file_name):    errors = False    error_msgs = []    # Make sure a PDF is selected    if Path(input_file).suffix.upper() != ".PDF":        errors = True        error_msgs.append("Please select a PDF input file")    # Make sure a range is selected    if len(range) < 1:        errors = True        error_msgs.append("Please enter a valid page range")    # Check for a valid directory    if not(Path(output_dir)).exists():        errors = True        error_msgs.append("Please Select a valid output directory")    # Check for a file name    if len(file_name) < 1:        errors = True        error_msgs.append("Please enter a file name")    return(errors, error_msgs)

这个函数就是执行一些检查来确保输入有数据并且有效

在收集验证了所有数据后,就可以调用 split 函数来处理文件了

def split_pages(input_file, page_range, out_file):    output = PdfFileWriter()    input_pdf = PdfFileReader(open(input_file, "rb"))    output_file = open(out_file, "wb")    page_ranges = (x.split("-") for x in page_range.split(","))    range_list = [i for r in page_ranges for i in range(int(r[0]), int(r[-1]) + 1)]    for p in range_list:        # Need to subtract 1 because pages are 0 indexed        try:            output.addPage(input_pdf.getPage(p - 1))        except IndexError:            # Alert the user and stop adding pages            app.infoBox("Info", "Range exceeded number of pages in input.\nFile will still be saved.")            break    output.write(output_file)    if(app.questionBox("File Save", "Output PDF saved. Do you want to quit?")):        app.stop()

到此,关于“Python怎么编写PDF拆分工具”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: Python怎么编写PDF拆分工具

本文链接: https://lsjlt.com/news/325369.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python怎么编写PDF拆分工具
    这篇文章主要介绍“Python怎么编写PDF拆分工具”,在日常操作中,相信很多人在Python怎么编写PDF拆分工具问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python怎么编写PDF拆分工具”的疑惑有所...
    99+
    2023-06-29
  • Python自动化办公之编写PDF拆分工具
    目录需求需求解析代码实现今天我们继续分享真实的自动化办公案例,希望各位 Python 爱好者能够从中得到些许启发,在自己的工作生活中更多的应用 Python,使得工作事半功倍! 需求...
    99+
    2024-04-02
  • Python编写nmap扫描工具
    NMAP是一款开源的网络探测和安全审核的工具,他能够快速的扫描出某个服务器对外暴露的端口信息。是在安全测试领域很常见的一个工具。 今天我们用python的模拟实现一个简单版本的端口扫描工具,主要使用到socket模...
    99+
    2022-06-02
    Python nmap扫描工具 Python nmap
  • Python怎么利用PyPDF2快速拆分PDF文档
    这篇文章主要讲解了“Python怎么利用PyPDF2快速拆分PDF文档”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python怎么利用PyPDF2快速拆分PDF文档”吧!目录安装PyPDF...
    99+
    2023-06-20
  • 基于Python怎么编写微信清理工具
    这篇“基于Python怎么编写微信清理工具”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“基于Python怎么编写微信清理工具...
    99+
    2023-06-30
  • 怎么用python编写一个图片拼接工具
    本文小编为大家详细介绍“怎么用python编写一个图片拼接工具”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么用python编写一个图片拼接工具”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。代码展示这里写了两...
    99+
    2023-06-28
  • 基于Java编写一个PDF与Word文件转换工具
    目录前言实现方法pom.xml策略接口PDF转图片实现PDF转word实现word转htmlword转图片word转pdf使用前言 前段时间一直使用到word文档转pdf或者pdf转...
    99+
    2023-01-10
    Java PDF转Word Java Word转PDF Java Word PDF
  • 如何使用Python代码写出pdf转word小工具
    这篇文章将为大家详细讲解有关如何使用Python代码写出pdf转word小工具,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、图示上面为pdf截图内容,下面为转化后的word截图内容接下来,我们试试自己...
    99+
    2023-06-15
  • Python编程编写完善的命令行工具
    目录1. python-fire2. mando最后的话1. python-fire python-fire 是一个三方库,可以将任何 Python 对象变成一个命令行接口。 使用前...
    99+
    2024-04-02
  • 如何用Python编写nmap扫描工具
    这篇文章主要介绍“如何用Python编写nmap扫描工具”,在日常操作中,相信很多人在如何用Python编写nmap扫描工具问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何用Python编写nmap扫描工具...
    99+
    2023-06-20
  • Python编写的Linux邮件发送工具
    之前有用过Linux自带的mail工具来定时发送邮件,但是要装mailx还有配mail.rc,这还比较正常,关键是到了ubantu下这工具用起来真是操蛋,如果哪天其他的unix like操作系统也有需求,那就太麻烦了,所以我用自带的pyt...
    99+
    2023-01-31
    邮件发送 工具 Python
  • 怎么使用Python代码实现一款永久免费PDF编辑工具
    今天小编给大家分享一下怎么使用Python代码实现一款永久免费PDF编辑工具的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。P...
    99+
    2023-07-02
  • 适用于Python的编写工具有哪些
    本篇内容主要讲解“适用于Python的编写工具有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“适用于Python的编写工具有哪些”吧!秘密武器#1:使用Kite可以更快地编写代码,减少Goo...
    99+
    2023-06-16
  • 基于Python编写一个ISBN查询工具
    目录1.引言2.实例分析3.总结1.引言 效果图: ISBN查询工具通常用于图书管理、图书销售、图书收集和阅读等场景。以下是一些具体的应用场景: 图书管理系统:ISBN查询工具可以...
    99+
    2023-05-19
    Python制作ISBN查询工具 Python ISBN查询工具 Python ISBN查询 Python ISBN
  • 用python编写一个图片拼接工具
    目录前言代码展示效果展示总结前言 故事要从上面这张表情包开始讲起,看到这张表情包之后,我突发奇想,觉得可以将室友上班摸鱼的照片拼接起来,做成表情包叫他起床 激励他学习!!!于是我马...
    99+
    2024-04-02
  • 只用40行Python代码就能写出pdf转word小工具
    目录一、图示二、前期准备三、pdf转word四、GUI设计五、打包代码一、图示 上面为pdf截图内容,下面为转化后的word截图内容 接下来,我们试试自己动作写这个工具吧! 二、前...
    99+
    2024-04-02
  • 使用python怎么编写一个本地应用搜索工具
    这篇文章主要介绍了使用python怎么编写一个本地应用搜索工具,此处通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考价值,需要的朋友可以参考下:python可以做什么Python是一种编程语言,内置了许多有效的工具,Pyt...
    99+
    2023-06-06
  • python编写adb截图工具的实现源码
    目录一、 功能二、使用说明三、实现1.初始源码2.优化:增加ip连接断开重连处理一、 功能 Android端或者Android终端的远程截图至本地电脑中 二、使用说明 adb截图工具可用于Android手机及And...
    99+
    2022-06-02
    python adb截图工具 python 截图工具
  • 怎么用Python写PDF转换器
    本篇内容介绍了“怎么用Python写PDF转换器”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 前言想必小伙伴都经历过,当你想要把...
    99+
    2023-06-16
  • 利用Python编写数据分析工具,实现精准市场营销
    随着互联网时代的到来,商业竞争越来越激烈,市场营销愈发困难。营销人员需要启用更科学的手段,才能应对复杂多变的市场环境。其中,数据分析作为一种强有力的工具,被广泛应用于市场营销之中。下面,我们将介绍如何利用Python编写数据分析...
    99+
    2024-01-19
    Python 数据分析 市场营销
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作