PyPDF2--如何使用python操作你的PDF文档

PyPDF2–如何使用python操作你的PDF文档

前言

大家好!最近想操作一下PDF文档,总是收费,于是浅尝辄止地了解了一下python当中的PyPDF2这个库。借助本篇博客总结了一下个人所学到的内容。本人才疏学浅,还望各位大佬多多指正。Python在自动化办公方面有很多实用的第三方库,可以很方便的处理word、excel、ppt、pdf文件,Python处理PDF文档的两个常用库pdfplumber,PyPDF2。在此本人对PyPDF2进行一个简单的介绍。

0.0:PyPDF2简介以及安装

PyPDF2 是一个纯 Python PDF 库,可以读取文档信息(标题,作者等)、写入、分割、合并PDF文档,它还可以对pdf文档进行添加水印、加密解密等操作。
很多具体参数设置大家可以访问其官方文档→https://pythonhosted.org/PyPDF2

Windows安装方法:

  1. win+r输入cmd 打开命令窗口
  2. 直接输入 pip install PyPDF2
  3. 速度太慢可以使用镜像如 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple PyPDf2
  4. 在pycharm上面:左上角File->Settings->Project Interpreter->+找到后Install就可以了
  5. 在https://pypi.org/project/PyPDF2/ 中搜索PyPDF2 1.26.0下载后也可以直接安装
    在这里插入图片描述
    (注:IOS系统以及Linux系统上安装在此不过多描述)

我们可以在其官方文档首页看到如下页面

在这里插入图片描述
我们可以看到这个第三方库主要包括PdfFileReader Class,PdfFileMerger,PageObject Class,PdfFileWriter这四个大类还有一个其他类。下面我们开始对其一一进行描述。

1:The PdfFileReader Class:

初始化一个 PdfFileReader 对象A,此操作可能需要一些时间,因为 PDF 流的交叉引用表被读入内存。

A = PyPDF2.PdfFileReader(stream, strict=True, warndest=None, overwriteWarnings=True)

其中参数:
stream:这个单词直接翻译成中文表示溪流或者流动,这里表示你需要操作的pdf文件或者其路径的字符串。
strict:确定是否应警告用户所有问题,并导致一些可纠正的问题致命。默认为True。
warndest:记录警告的目标(默认为系统标准)
overwriteWarnings:觉得是否使用一个自定义实现来覆盖python的warning模块。
正常情况下我们一般只会用到第一个参数stream

关于PdfFileReader的一些操作函数属性的讲解

相关属性以及函数 描述 备注
decrypt(password) 可以对加密的文档进行解密操作
documentInfo 通过getDocumentInfo()函数功能访问的只读属性
getDestinationPageNumber(destination) 检索目标对象的页数 若错误则返回-1
getDocumentInfo() 检索PDF文件的字典信息是否存在存在会返回相关信息,不存在则会返回None 部分PDF文件使用的是元数据流
getFields(tree=None, retval=None, fileobj=None) 如果此 PDF文档中包含交互式表单字段,则提取字段数据 返回类型是字典或者None
getFormTextFields() 从文档中检索带有文本数据(输入,下拉列表)的表单域
getNamedDestinations(tree=None, retval=None) 检索文档中的特定的目标 返回字典类型
namedDestinations 通过getNamedDestinations()函数的只读属性
getNumPages() 计算此PDF的页数
numPages 通过getNumPages()函数的只读属性
getOutlines(node = None,outlines = None ) 检索文档中存在的文档大纲
outlines 通过getOutlines()函数的只读属性
getPage(pageNumber ) 按编号检索页面 就是找到某页内容
getPageLayout() 获取页面布局 返回类型为字符串
pageLayout 通过getPageLayout()的只读属性
getPageMode() 获取页面模式 返回类型为字符串
pageMode 通过getPageMode的只读属性
getPageNumber(页面) 检索给定页面的页码
getXmpMetadata() 从PDF文档根目录检索XMP(可扩展元数据平台)数据
xmpMetadata 通过getXmpMetadata()的只读属性
isEncrypted 显示此文档是否被加密的属性 如果为True调用decrypt()解密之后属性依旧为True

PdfFileReader相关代码举例

以下代码均在Anaconda3上正常运行

from PyPDF2 import PdfFileReader
import os   #os库可以进行相关路径操作在此不做多示范
readFile = './XXX.pdf'#这里XXX改成你这个.py同文件夹下的pdf文件名即可
# 获取 PdfFileReader 对象
pdfFileReader = PdfFileReader(readFile)  # 或者这个方式:pdfFileReader = PdfFileReader(open(readFile, 'rb'))
# 获取 PDF 文件的文档信息
documentInfo = pdfFileReader.getDocumentInfo()
print('documentInfo = %s' % documentInfo)
# 获取页面布局
pageLayout = pdfFileReader.getPageLayout()
print('pageLayout = %s ' % pageLayout)
# 获取页模式
pageMode = pdfFileReader.getPageMode()
print('pageMode = %s' % pageMode)
xmpMetadata = pdfFileReader.getXmpMetadata()
print('xmpMetadata  = %s ' % xmpMetadata)
# 获取 pdf 文件页数
pageCount = pdfFileReader.getNumPages()
print('pageCount = %s' % pageCount)
for index in range(0, pageCount):
    # 返回指定页编号的 pageObject
    pageObj = pdfFileReader.getPage(index)
    print('index = %d , pageObj = %s' % (index, type(pageObj)))
    # 获取 pageObject 在 PDF 文档中处于的页码
    pageNumber = pdfFileReader.getPageNumber(pageObj)
    print('pageNumber = %s ' % pageNumber)

结果

由于本人测试文件有42页,在此不全做展示
在这里插入图片描述

2:The PdfFileMerger Class:

初始化一个PdfFileMerger对象B,其可以将多个pdf合并成 一个,可以串联、切片或者插入

 B = PyPDF2.PdfFileMerger(strict
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值