Python 自动化之修理PDF文件(二)

2023-12-13 22:30
文章标签 python 自动化 pdf 修理

本文主要是介绍Python 自动化之修理PDF文件(二),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

PDF文件_合并与拆分PDF文档Pro版本


文章目录

  • PDF文件_合并与拆分PDF文档Pro版本
  • 前言
  • 一、要做成什么样子
  • 二、主要用到的函数
  • 三、基本思路
    • 1.引入库
    • 2.创建用户输入模块
    • 3.确定主框架
  • 四、文档合并代码模块
    • 1.用户输入和函数调用
    • 2.引导用户输入文档信息
    • 3.合并文档内容
    • 4.命名新文档+生成路径
    • 5.保存文档+结束调用
  • 五、文档拆分代码模块
    • 1.确定基本框架
    • 2.用户输入和前提准备
    • 3.每一页都拆分代码模块
    • 4.指定页码拆分代码模块
      • 4.1.用户输入和创建对象
      • 4.2.遍历暂存指定页码内容
      • 4.3.指定路径生成指定名称的新PDF
  • 总结


前言

`
上一篇讲了pdf转文字的操作,这篇我们接着讲如何去拆分和合并pdf文件。用过的应该知道,在某软件上虽然可以用,但是也是存在限制的,文档页数过多就需要会员了。

那么怎么样才能不花钱(这个很重要)就能使用呢?自己写一个(# ^ . ^ #)
Alt


一、要做成什么样子

  1. 任意数量、页数的pdf文档,只要你电脑不冒烟~ ~ ~ ~
  2. 可按顺序合并任意数量的pdf文档。
  3. 可按顺序拆分任意页数的pdf文档。
  4. 可任意截取拆分掉pdf文档的某一段。
  5. 拆分的文档会按《原名+第a页》、《原名+第a页_第b页》命名
  6. 合并的文档会提示你给它取个新名字。
  7. 指定位置保存产生的新文件。

目前就想到这么些,后续有新的点子我再往上搞

二、主要用到的函数

都是PyPDF2 库的东西。
一个是PdfReader,用来读取pdf文档数据的;二是PdfWriter,用来写入前面读取到的数据。

三、基本思路

1.引入库

代码如下:

from PyPDF2 import PdfWriter
import PyPDF2

2.创建用户输入模块

代码如下:

print('请选择您要的操作(1 合并  2 拆分) :',  end='')
Go = input()

这里会提示用户是要合并还是拆分pdf文档,输入不同的数字会进入到不同的模式中去。
end=’ '的作用是不换行,可以在文字提示的后面直接输入。


3.确定主框架

代码如下:

if Go == '1':    #文档合并......
elif Go == '2':    #文档拆分......

上面也提到了,涉及到pdf的两个动作:合并和拆分。所以我这里采用if-----elif----的结构来处理。

接下来就是两个代码模块的编写了。这里我先写文档合并,后写文档拆分。


四、文档合并代码模块

1.用户输入和函数调用

代码如下:

		#提示用户输入print('请输入需要合并的pdf文档个数:', end='')numbers_pdf = int(input())#函数调用merger = PdfWriter()

需要合并几个文档就输入数字几就ojbk。
这里调用的函数下面会用到。PdfWriter 对象通常被用来合并PDF文件,或者创建新的PDF文档。


2.引导用户输入文档信息

代码如下:

    #创建空列表,用来存储pdf名称list_pdf = []#进行相应次数的遍历循环for number_pdf in range(numbers_pdf):#提示用户按照固定格式输入print(f'请按顺序输入第 {number_pdf+1} 个pdf(例子:E:\BaiduNetdiskDownload\你好.pdf):', end='')old_pdf = input()#用户每次输入都会被添加到列表当中list_pdf.append(old_pdf)

这段代码的意思是你合并几个文档,程序就会提示你几次输入文档信息。
需要注意的是,输入的先后顺序也代表了后续合并后内容的先后顺序。


3.合并文档内容

代码如下:

    for pdf in list_pdf:merger.append(pdf)

代码很少,意思就是遍历刚才用户输入的文档信息,逐个进行合并。


4.命名新文档+生成路径

代码如下:

    #提示输入文档名称print('已合并完,请输入新文件名称(例子:aaa)不用添加扩展名:', end='')new_pdf_name = input()# 指定保存 .pdf 文件的完整路径和名称output_dir = "D:/"  # 替换为您的实际输出目录output_file_name = f"{new_pdf_name}_合并.pdf"output_path = output_dir + output_file_name

第一段代码是提示用户输入新文档的名字,下面会用到。
第二段代码的意思是我先指定一个路径,然后生成文档的名称 new_pdf_name_合并.pdf,最后对它俩进行字符串拼接,这样后面才能根据output_path信息在指定路径下保存pdf文档。


5.保存文档+结束调用

代码如下:

    merger.write(output_path)print('合并好了去查收吧')merger.close()

提示合并好了。然后就去指定目录查看就行了。

合并文档到这里就结束了。


五、文档拆分代码模块

将拆分分为两部分,一是每一页都拆出来形成一个新文档;二是有用户指定范围,形成新文档。所以,在这里又会用到if----elif—结构,相当于嵌套里的嵌套。

这里我会先写每一页都拆,后写指定范围。

1.确定基本框架

代码如下:

    ..........       #用户输入和前提准备if split == '1':    #每一页都拆......elif split == '2':    #指定范围拆......

上面也刚说了,这里就不废话了。


2.用户输入和前提准备

代码如下:

        #提示用户输入要拆分的PDF文档print('请输入您要查分的文件(例子:E:\BaiduNetdiskDownload\你好.pdf):', end='')chaifen_pdf = input()open_pdf = open(chaifen_pdf, 'rb')       #以二进制形式打开文档read_pdf = PyPDF2.PdfReader(open_pdf)    #读取上面打开的PDF文件内容get_pdf_pages = len(read_pdf.pages)      #通过read_pdf获取PDF的总页数print(f"该文件共有{get_pdf_pages}页")#提示用户选择拆分模式print('全部拆分请输入1 指定位置查分请输入2 :', end='')split = input()

先是提示用户输入要拆分的文档;然后程序会打开并读取文档内内容,告诉我们文档总共有多少页;最后是提示用户选择哪种模式拆分。
我就不细说了,代码注释写的很明白。


3.每一页都拆分代码模块

代码如下:

            #遍历文档的每一页for get_pdf_page in range(get_pdf_pages):#读取文档当前遍历的页page = read_pdf.pages[get_pdf_page]# 创建一个新的PdfWriter对象pdf_writer = PdfWriter()# 将当前页添加到新的PdfWriter对象中pdf_writer.add_page(page)# 获取用户输入的文件名,不包括路径pdf_file_name = chaifen_pdf.split('\\')[-1]  # 使用 \\ 分隔符 去掉路径pdf_base_name = pdf_file_name.split('.')[0]  # 去掉扩展名# 指定保存 .pdf 文件的完整路径和名称output_dir = "D:/"  # 替换为您的实际输出目录output_file_name = f"{pdf_base_name}_第{get_pdf_page + 1}页.pdf"output_path = output_dir + output_file_namepdf_writer.write(output_path)pdf_writer.close()print('拆分好了,快去看一下吧。')

由于基本上都是在for_in range()结构的循环下,我就一块写了,要不让分开写很容易看混。
整体上分为五部分:

  1. 第一部分:读取文档当前遍历的页,然后创建一个新的PdfWriter对象,最后将当前页添加到新的PdfWriter对象中(就是生成一页的文档),三者缺一不可。如果没有PdfWriter对象,会出现第n份文档有n页内容。
  2. 第二部分和第三部分可以看我上一个文档的《第四大段第5小节》有详细解释。这是链接:https://blog.csdn.net/weixin_57061292/article/details/134790966
  3. 第四部分:按照前几分部分的设置进行文件的保存,还有结束函数的调用(有始有终嘛)。
  4. 第五部分:友好提示,出现上面那几个字就代表搞定了。

4.指定页码拆分代码模块

4.1.用户输入和创建对象

代码如下:

            print('请输入开始页 :', end='')start_pages = int(input())print('请输入结束页 :', end='')end_pages = int(input())# 创建一个新的PdfWriter对象pdf_writer = PdfWriter()

两部分,一是引导用户输入需要把从哪一页到哪一页的内容拆出来;二是函数的调用,没啥好说的(这是主力)。


4.2.遍历暂存指定页码内容

代码如下:

            for get_pdf_page in range(start_pages-1, end_pages):page = read_pdf.pages[get_pdf_page]# 将当前页添加到新的PdfWriter对象中pdf_writer.add_page(page)

这个结构用过很多次了,就不赘述了。
意思就是遍历我们选中的页,先把它们暂存起来留到到后面用。


4.3.指定路径生成指定名称的新PDF

代码如下:

           # 获取用户输入的文件名,不包括路径pdf_file_name = chaifen_pdf.split('\\')[-1]  # 使用 \\ 分隔符 去掉路径pdf_base_name = pdf_file_name.split('.')[0]  # 去掉扩展名# 指定保存 .pdf 文件的完整路径和名称output_dir = "D:/"  # 替换为您的实际输出目录output_file_name = f"{pdf_base_name}_第{start_pages}_{end_pages}页.pdf"output_path = output_dir + output_file_namepdf_writer.write(output_path)pdf_writer.close()print('拆分好了,快去看一下吧。')

各位同志,看不懂的话。这里请一定要参考 《 3.每一页都拆分代码模块》 和我的上一篇博客,这是链接:https://blog.csdn.net/weixin_57061292/article/details/134790966


总结

这就是PDF拆分和合并的全部内容了,看看这篇的反馈吧。有需要的话。后面我再找找PDF还有哪些操作大家还常用 给大家写出来。

在这里插入图片描述

这篇关于Python 自动化之修理PDF文件(二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/490188

相关文章

利用python实现对excel文件进行加密

《利用python实现对excel文件进行加密》由于文件内容的私密性,需要对Excel文件进行加密,保护文件以免给第三方看到,本文将以Python语言为例,和大家讲讲如何对Excel文件进行加密,感兴... 目录前言方法一:使用pywin32库(仅限Windows)方法二:使用msoffcrypto-too

使用Python实现矢量路径的压缩、解压与可视化

《使用Python实现矢量路径的压缩、解压与可视化》在图形设计和Web开发中,矢量路径数据的高效存储与传输至关重要,本文将通过一个Python示例,展示如何将复杂的矢量路径命令序列压缩为JSON格式,... 目录引言核心功能概述1. 路径命令解析2. 路径数据压缩3. 路径数据解压4. 可视化代码实现详解1

python获取网页表格的多种方法汇总

《python获取网页表格的多种方法汇总》我们在网页上看到很多的表格,如果要获取里面的数据或者转化成其他格式,就需要将表格获取下来并进行整理,在Python中,获取网页表格的方法有多种,下面就跟随小编... 目录1. 使用Pandas的read_html2. 使用BeautifulSoup和pandas3.

Python装饰器之类装饰器详解

《Python装饰器之类装饰器详解》本文将详细介绍Python中类装饰器的概念、使用方法以及应用场景,并通过一个综合详细的例子展示如何使用类装饰器,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录1. 引言2. 装饰器的基本概念2.1. 函数装饰器复习2.2 类装饰器的定义和使用3. 类装饰

Python 交互式可视化的利器Bokeh的使用

《Python交互式可视化的利器Bokeh的使用》Bokeh是一个专注于Web端交互式数据可视化的Python库,本文主要介绍了Python交互式可视化的利器Bokeh的使用,具有一定的参考价值,感... 目录1. Bokeh 简介1.1 为什么选择 Bokeh1.2 安装与环境配置2. Bokeh 基础2

如何使用 Python 读取 Excel 数据

《如何使用Python读取Excel数据》:本文主要介绍使用Python读取Excel数据的详细教程,通过pandas和openpyxl,你可以轻松读取Excel文件,并进行各种数据处理操... 目录使用 python 读取 Excel 数据的详细教程1. 安装必要的依赖2. 读取 Excel 文件3. 读

Python的time模块一些常用功能(各种与时间相关的函数)

《Python的time模块一些常用功能(各种与时间相关的函数)》Python的time模块提供了各种与时间相关的函数,包括获取当前时间、处理时间间隔、执行时间测量等,:本文主要介绍Python的... 目录1. 获取当前时间2. 时间格式化3. 延时执行4. 时间戳运算5. 计算代码执行时间6. 转换为指

利用Python调试串口的示例代码

《利用Python调试串口的示例代码》在嵌入式开发、物联网设备调试过程中,串口通信是最基础的调试手段本文将带你用Python+ttkbootstrap打造一款高颜值、多功能的串口调试助手,需要的可以了... 目录概述:为什么需要专业的串口调试工具项目架构设计1.1 技术栈选型1.2 关键类说明1.3 线程模

Python ZIP文件操作技巧详解

《PythonZIP文件操作技巧详解》在数据处理和系统开发中,ZIP文件操作是开发者必须掌握的核心技能,Python标准库提供的zipfile模块以简洁的API和跨平台特性,成为处理ZIP文件的首选... 目录一、ZIP文件操作基础三板斧1.1 创建压缩包1.2 解压操作1.3 文件遍历与信息获取二、进阶技

Python Transformers库(NLP处理库)案例代码讲解

《PythonTransformers库(NLP处理库)案例代码讲解》本文介绍transformers库的全面讲解,包含基础知识、高级用法、案例代码及学习路径,内容经过组织,适合不同阶段的学习者,对... 目录一、基础知识1. Transformers 库简介2. 安装与环境配置3. 快速上手示例二、核心模