打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
使用Python拆分和合并PDF文件

标签:PythonExcel,PyPDF4

下面是应用场景:

我曾经收到一份20页的PDF银行对账单,需要将其中的3页转发给另一方,但我不想发送整个文件,因为有些页面包含我不愿意共享的个人信息。因此,我需要一种分割PDF文件的方法。虽然Adobe Acrobat Pro DC允许拆分和合并PDF文件,但需要付费。

Python就能够实现,谁不喜欢免费的解决方案呢?

安装Python库并将PDF文件装载到Python

我们将使用PyPDF4库来处理PDF文件。先使用pip安装来安装这个库:

pip install PyPDF4

我们将创建一个PdfileReader对象来表示PDF文件。稍后,我们需要实例化一个PdfielWriter对象来保存PDF文件。

from PyPDF4 import PdfFileReader,PdfFileWriter

pdf =PdfFileReader(r'D:\data-1.pdf')

现在我们有一个名为pdf的对象来表示实际的pdf文件,可以访问PDF中包含的信息。在本例中,使用的示例名为data-1.pdf(有兴趣的朋友可以到知识星球完美Excel社群中下载该文件,也可以自己制作一个用于演示的文件)

提取有关PDF文件的基本信息

让我们检查一些关于这个PDF文件的基本信息。看起来作者是使用MS Word创建了这个12页的文档,然后将其转换为PDF

1:使用Python提取PDF文件基本信息

为了演示,我将从文件中随机提取一些页面,假设我只想获得第1-35611-12页。因此,我们可以构造一个列表来存储页码:[1,2,3,4,5,11,12]

PDF文件中获取页面

我们可以使用pdf.getPage()pdf对象获取特定页面。记住,Python索引从0开始,而不是1,因此许多Python库都遵循此约定。getPage(0)pdf文件的第一页,pdf.getPage(11)是最后一页。调用pdf.getPage12)将抛出“索引超出范围”错误,因为这意味着正试图访问12页文件中的第13页。不要介意pdf.getPage(0)中显示的所有乱七八糟的内容,只要知道这个对象是第一个页面。.getPage()方法允许我们将PDF文件拆分为单独的页面,以便我们可以选择,然后使用Python将它们合并到一个文件中。

2:使用PythonPDF文件中获取页面

创建并保存PDF文件

现在我们已经成功地从PDF中提取了一个页面。要将其保存为单独的文件,我们需要创建一个PdfielWriter()对象,将页面添加到该对象中,然后将其保存到计算机。

按照上述步骤编写代码如下。注意,open()函数中的”wb”指的是”write binary”

pdf_writer = PdfFileWriter()

pdf_writer.addPage(pdf.getPage(0))

with open(r'D:\page_1.pdf', 'wb') asf:

   pdf_writer.write(f)

将多个页面合并到同一个PDF文件中

我们现在可以继续从PDF中获取所有需要的页面,并将它们合并到一个文件中。之前,我们已经创建了要提取的页码列表:pages=[1,2,3,4,5,11,12]。由于Python基于0的索引,我们需要将每个数字移位1。只要把所有的数字循环一遍,然后从每个数字中减去一个。很简单!Python的方法称为列表解析,或者有时在Python中称为“执行循环的一行程序”。

pages = [i-1 for i in pages]

3Python列表解析

现在我们有了正确的页面索引,就可以完成PDF合并过程。

pdf_writer = PdfFileWriter()

pages = [1,2,3,4,5,11,12]

pages = [i-1 for i in pages]

for p in pages:

   pdf_writer.addPage(pdf.getPage(p))

withopen(r'D:\select_pages.pdf','wb') as f:

   pdf_writer.write(f)

有时,运行上述代码,我们会得到一条奇怪的错误消息AttributeError:“PdfileWriter”对象没有属性“stream”。结果表明PyPDF4库中有一个bug,每次保存完PDF文件并想保存另一个文件时,都必须重新创建PdfileReader()对象。这里,我们看到这个错误是因为之前保存了一个一页的PDF文件。因此,在运行PdfielWriter().write()方法之前,不要忘记总要创建一个新的PdfielReader()对象。

如果想合并多个PDF文件呢?

过程和上文讲述的是一样的,所以不会在这里重复。提示:

1.循环遍历要合并的PDF文件。

2.在每个PDF文件中,遍历页面,并将每个页面添加到PdfielWriter对象中。

3.通过调用PdfFileWriter.write()方法保存新PDF

将上述代码放到一起

下面是允许你使用Python拆分和合并PDF文件的完整代码:

from PyPDF4 import PdfFileReader,PdfFileWriter

pdf =PdfFileReader(r'D:\data-1.pdf')

pdf_writer = PdfFileWriter()

pdf.numPages

pdf.getDocumentInfo()

pages = [1,2,3,4,5,11,12]

pages = [i-1 for i in pages]

for p in pages:

   pdf_writer.addPage(pdf.getPage(p))

withopen(r'D:\select_pages.pdf','wb') as f:

   pdf_writer.write(f)

小结

我们已经介绍了如何使用Python处理PDF文件:

1.获取有关PDF文件的基本信息。

2.通过提取单个页面来拆分PDF文件。

3.将页面合并到新的PDF文件中。

注:本文学习整理自pythoninoffice.com

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
用python操作PDF文件
利用Python玩转PDF,简单实用
Python 方便快捷给 PDF 加水印
实例4:用Python提取不同PDF文件中的页面合并进新的PDF文件
python合并多个pdf文件
【python 技巧】如何使用缓存流压缩PDF文件?
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服