Python 自动化之修理PDF文件(二)
PDF文件_合并与拆分PDF文档Pro版本
文章目录
前言
`
上一篇讲了pdf转文字的操作,这篇我们接着讲如何去拆分和合并pdf文件。用过的应该知道,在某软件上虽然可以用,但是也是存在限制的,文档页数过多就需要会员了。
那么怎么样才能不花钱(这个很重要)就能使用呢?自己写一个(# ^ . ^ #)
一、要做成什么样子
- 任意数量、页数的pdf文档,只要你电脑不冒烟~ ~ ~ ~
- 可按顺序合并任意数量的pdf文档。
- 可按顺序拆分任意页数的pdf文档。
- 可任意截取拆分掉pdf文档的某一段。
- 拆分的文档会按《原名+第a页》、《原名+第a页_第b页》命名
- 合并的文档会提示你给它取个新名字。
- 指定位置保存产生的新文件。
目前就想到这么些,后续有新的点子我再往上搞
二、主要用到的函数
都是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_name
pdf_writer.write(output_path)
pdf_writer.close()
print('拆分好了,快去看一下吧。')
由于基本上都是在for_in range()结构的循环下,我就一块写了,要不让分开写很容易看混。
整体上分为五部分:
- 第一部分:读取文档当前遍历的页,然后创建一个新的PdfWriter对象,最后将当前页添加到新的PdfWriter对象中(就是生成一页的文档),三者缺一不可。如果没有PdfWriter对象,会出现第n份文档有n页内容。
- 第二部分和第三部分可以看我上一个文档的《第四大段第5小节》有详细解释。这是链接:https://blog.csdn.net/weixin_57061292/article/details/134790966
- 第四部分:按照前几分部分的设置进行文件的保存,还有结束函数的调用(有始有终嘛)。
- 第五部分:友好提示,出现上面那几个字就代表搞定了。
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_name
pdf_writer.write(output_path)
pdf_writer.close()
print('拆分好了,快去看一下吧。')
各位同志,看不懂的话。这里请一定要参考 《 3.每一页都拆分代码模块》 和我的上一篇博客,这是链接:https://blog.csdn.net/weixin_57061292/article/details/134790966
总结
这就是PDF拆分和合并的全部内容了,看看这篇的反馈吧。有需要的话。后面我再找找PDF还有哪些操作大家还常用 给大家写出来。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!