总结用Python 操作 PDF 的几种方法-Python教程

资源魔 56 0

python教程栏目明天为各人总结用Python操作PDF的几种办法。

01

媒介

各人好,无关 Python 操作 PDF 的案例以前曾经写过一个?PDF批量兼并,这个案例初志只是给各人提供一个便当的剧本,并无太多解说原理,此中触及的就是 PDF 解决很适用的模块 PyPDF2 ,本文就好好分析一下这个模块,次要将触及

  • os 模块综合使用
  • glob 模块综合使用
  • PyPDF2 模块操作

02

根本操作

PyPDF2 导入模块的代码经常是:

from PyPDF2 import PdfFileReader, PdfFileWriter复制代码

这里导入了两个办法:

  • PdfFileReader 能够了解为读取器
  • PdfFileWriter 能够了解为写入器

接上去经过几个案例进一步意识这两个对象的微妙的地方,用到的示例文件是5个发票的 pdf

每一个发票的 PDF 都由两页组成:

03

兼并

第一个工作是将5个发票pdf兼并成10页。这里读取器以及写入器应该怎样合营呢?

逻辑以下:

  • 读取器将一切pdf读取一遍
  • 读取器将读取的内容交给写入器
  • 写入器对立输入到一个新pdf

这里另有一个首要的常识点:读取器只能将读取的内容一页一页交给写入器。

因而,逻辑中第1步以及第2步实际上没有是彼此自力的步骤,而是读取器读取完一个pdf后,就将这个pdf全副页轮回一遍,挨页交给写入器。最初等读取工作全副完结后再输入。

看一下代码能够让思绪更分明:

from PyPDF2 import PdfFileReader, PdfFileWriter

path = r'C:\Users\xxxxxx'
pdf_writer = PdfFileWriter()

for i in range(1, 6):
    pdf_reader = PdfFileReader(path + '/INV{}.pdf'.format(i))
    for page in range(pdf_reader.getNumPages()):
        pdf_writer.addPage(pdf_reader.getPage(page))

with open(path + r'\兼并PDF\merge.pdf', 'wb') as out:
    pdf_writer.write(out)复制代码

因为全副内容都需求交给同一个写入器最初一同输入,以是写入器的初始化肯定是正在轮回体以外的.

假如正在轮回体内则会变为每一次拜访读取一个pdf就天生一个新的写入器,这样每个读取器交给写入器的内容就会被重复笼罩,无奈完成咱们的兼并需要!

轮回体扫尾的代码:

for i in range(1, 6):
    pdf_reader = PdfFileReader(path + '/INV{}.pdf'.format(i))复制代码

目的就是每一次轮回读取一个新的 pdf 文件交给读取器进行后续操作。实际上这类写法没有是很倡导,因为各 pdf 定名恰恰很规定,以是能够间接工钱指定命字进行轮回。更好的办法是用 glob 模块:

import glob
for file in glob.glob(path + '/*.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 的几种办法的具体内容,更多请存眷资源魔其它相干文章!

标签: Python pdf python教程 python编程 python使用问题

抱歉,评论功能暂时关闭!