如何用python处理pdf,python 写入pdf

  如何用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 文档
  • 读取器一页一页交给写入器
  • 写入器每获取一页就立即输出
通过这个代码逻辑我们也可以明白,写入器初始化和输出的位置一定都在读取 PDF 循环每一页的循环体内,而不是在循环体外

  代码很简单:

  

from PyPDF2 import PdfFileReader, PdfFileWriter

  path = 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)复制代码

05

  水印

  本次的工作是将下图作为水印添加到 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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: