如何用python处理pdf,python 写入pdf
python教程·栏目今天为大家总结用Python操作PDF的几种方法。
01
前言
大家好,之前写过一个关于Python操作PDF的案例?PDF批量合并,这个案例的初衷只是给你提供一个方便的脚本,并没有太多的解释原理。它涉及到一个非常实用的PDF处理模块,PyPDF2.本文将好好研究一下这个模块,主要涉及
os模块综合应用glob模块综合应用PyPDF2模块操作02
基本操作
PDF 2导入模块的代码通常是:
从PDF 2导入PDF FileReader,PDF FileWriter复制代码这里有两种方法:
PdfFileReader可以理解为读者,PdfFileWriter可以理解为作家。接下来我们将通过几个案例进一步了解这两个工具的奇妙之处。使用的样本文件是五张发票的pdf文件。
每张发票的PDF包含两页:
03
合并
第一件事是将5个发票pdf合并成10页.这里的读者和作者应该如何合作?
逻辑如下:
由阅读器阅读所有pdf。阅读器会把阅读的内容交给写手,写手统一输出到新的PDF。这里还有一个重要的知识点:阅读者只能将阅读的内容一页一页的交给书写者。
因此,逻辑中的第一步和第二步实际上是不是彼此独立的步骤.在读者阅读pdf后,它循环pdf的所有页面,并逐页将其交给作者。等到所有读取工作完成后再输出。
看一下代码,让这个想法更加清晰:
从PyPDF2导入PdfFileReader、PdfFileWriter
path=rC:\Users\xxxxx
x
pdf_writer=PdfFileWriter()
对于(1,6):范围内的I
pdf _ reader=PdfFileReader(path /INV { })。 pdf 格式(一))
对于范围内的页面(pdf_reader.getNumPages()):
pdf _ writer . add page(pdf _ reader . get page(page))
with(pathr \ merged PDF \ merge . PDF , wb) as out:
Pdf_writer.write(out)复制代码。因为所有的内容都需要交给同一个writer进行最终输出,所以writer的初始化必须在循环之外。
如果在循环中,它将成为一个每次访问读取一个pdf就生成一个新的写入器,这样每个读者给作者的内容将是反复覆盖,不能满足我们的合并要求!
循环开始处的代码:
对于(1,6):范围内的I
Pdf _ reader=pdf filereader(路径/inv {})。 pdf format (I))复制代码的目的是每次读取一个新的PDF文件,交给阅读器进行后续操作。其实这种写法不太推荐。由于pdf的命名恰好非常有规律,所以可以直接分配编号进行流通。更好的方法是使用glob模块:
导入全球
对于glob.glob(路径“/*”中的文件。pdf’):
Pdf_reader=PdfFileReader(path)复制代码。pdf_reader.getNumPages():可以获得读者的页数,并与range.合作
> 就能遍历读取器的所有页。
pdf_writer.addPage(pdf_reader.getPage(page)) 能够将当前页交给写入器。
最后,用 with 新建一个 pdf 并由写入器的 pdf_writer.write(out) 方法输出即可。
04
拆分
如果明白了合并操作中读取器和写入器的配合,那么拆分就很好理解了,这里我们以拆分 INV1.pdf 为2个单独的 pdf 文档为例,同样也先来捋一捋逻辑:
- 读取器读取 PDF 文档
- 读取器一页一页交给写入器
- 写入器每获取一页就立即输出
代码很简单:
from PyPDF2 import PdfFileReader, PdfFileWriter05path = r'C:\Users\xxx'
pdf_reader = PdfFileReader(path + '\INV1.pdf')
for page in range(pdf_reader.getNumPages()):
# 遍历到每一页挨个生成写入器
pdf_writer = PdfFileWriter()
pdf_writer.addPage(pdf_reader.getPage(page))
# 写入器被添加一页后立即输出产生pdf
with open(path + '\INV1-{}.pdf'.format(page + 1), 'wb') as out:
pdf_writer.write(out)复制代码
水印
本次的工作是将下图作为水印添加到 INV1.pdf 中
首先是准备工作,将需要作为水印的图片插入 word 中调整合适位置后保存为PDF文件。然后就可以码代码了,需要额外用到 copy 模块,具体解释见下图:
就是把读取器和写入器初始化,并且把水印 PDF 页先读取好备用,核心代码稍微比较难理解:
加水印本质上就是把水印 PDF 页和需要加水印的每一页都合并一遍
由于需要加水印的 PDF 可能有很多页,而水印 PDF 只有一页,因此如果直接把水印 PDF 拿来合并,可以抽象理解成加完第一页,水印 PDF 页就没有了。
因此不能直接拿来合并,而要把水印 PDF 页不断 copy 出来成新的一页备用 new_page ,再运用 .mergePage 方法完成跟每一页合并,把合并后的页交给写入器待最后统一输出!
关于 .mergePage 的使用:出现在下面的页 .mergePage (出现在上面的页),最后效果如图:
06
加密
加密很简单,只需要记住:「加密是针对写入器加密」
因此只需要在相关操作完成后调用 pdf_writer.encrypt (密码)
以单个 PDF 的加密为例:
写在最后
当然除了对 PDF 的合并、拆分、加密、水印,我们还可以使用 Python 结合 Excel 和 Word 实现更多的自动化需求,这些就留给读者自己开发。Python资源分享君羊1075110200 ,内有安装包,PDF,学习视频,这里是Python学习者的聚集地,零基础,进阶,都欢迎最后还是希望大家能够理解Python办公自动化的一个核心就是批量操作-解放双手,让复杂的工作自动化!
更多相关免费学习推荐:python教程(视频)以上就是总结用Python 操作 PDF 的几种方法的详细内容,更多请关注盛行IT软件开发工作室其它相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。