关于PDF的相关操作-----PyPDF2
对于pdf文件的相关操作,PyPDF2文档中具有许多功能,阅读完本文后相信你会对pdf的操作变得非常自信!!
https://pythonhosted.org/PyPDF2/
该网址是PyPDF2英文文档的链接,本人从中提取了相应数据,并制作成表格方便大家比较和分析。
目录
一、准备工作
1.安装PyPDF2
2.导入相应的库
二、类的介绍
1.PdfFileReader()
2.PdfFileMerger()
3.PageObject()
4.PdfFileWriter()
三、代码演示---将pdf分割成自己想要的pdf
1.思路
2.代码与结果展示
3.总结
一、准备工作
1.安装PyPDF2
本文采用在pycharm中安装,左上角File---Settings---找到Project---Python interpreter---点击+
---输入pypdf2(大小写均可)---点击install Package---最后等待安装
2.导入相应的库
由于PyPDF2中有很多类,每个类中又有许多方法
所以导入相应的类时要注意层次和大小写
from PyPDF2 import PdfFileReader, PdfFileWriter
二、类的介绍
注:以下表格建议在电脑上查看,红色的内容为平时用的比较多的方法。
1.PdfFileReader
()
PdfFileReader
(流,strict=True,warndest=None,overwriteWarnings=True )
含义:初始化 PdfFileReader 对象。此操作可能需要一些时间,因为 PDF 流的交叉引用表被读入内存。
参数: |
|
---|
方法名 | 含义 | 参数 | 返回 | 返回类型 |
---|---|---|---|---|
decrypt (密码)
|
当使用带有 PDF 标准加密处理程序的加密/安全 PDF 文件时,此功能将允许解密文件。它根据文档的用户密码和所有者密码检查给定的密码,然后如果其中一个密码正确,则存储生成的解密密钥。 | 密码( str ) – 要匹配的密码。 |
|
整数 |
|
检索给定 Destination 对象的页码 | 目的地(目的地)– 获取页码的目的地。 | 页码 或 -1(找不到页面) | 整数 |
getDocumentInfo ( )
|
检索 PDF 文件的文档信息字典(如果存在)。请注意,某些 PDF 文件使用元数据流而不是 docinfo 词典,并且此功能不会访问这些元数据流。 | 此 PDF 文件的文档信息 |
DocumentInformation 或者None( 不存在)
|
|
retval=None , fileobj=None ) |
如果此 PDF 包含交互式表单字段,则提取字段数据。该树和retval的参数是递归使用。 | fileobj – 一个文件对象(通常是一个文本文件),用于针对找到的所有交互式表单字段编写报告。 |
一个字典,其中每个键是一个字段名称,每个值是一个Field 对象。默认情况下,映射名称用于键。
|
dict,或者None 如果找不到表单数据。
|
getFormTextFields ( )
|
从带有文本数据(输入、下拉菜单)的文档中检索表单域 | |||
getNamedDestinations ( tree=None , retval=None )
|
检索文档中存在的命名目的地。 |
将名称映射到 Destinations
|
字典 | |
getNumPages ( )
|
计算此 PDF 文件中的页数。 | 页数 | 整数 | |
getOutlines ( node=None , outlines=None )
|
检索文档中存在的文档大纲。 |
嵌套列表Destinations
|
||
getPage ( pageNumber )
|
从此 PDF 文件中按编号检索页面。 | pageNumber ( int ) – 要检索的页码(页面从零开始) |
一个PageObject 实例
|
PageObject
|
getPageLayout ( )
|
获取页面布局。有关setPageLayout() 有效布局的说明,请参见
|
当前使用的页面布局。 |
str ,None 如果没有指定
|
|
getPageMode ( )
|
获取页面模式。有关setPageMode() 有效模式的说明,请参见
|
当前使用的页面模式 |
str ,None 如果没有指定
|
|
getPageNumber (页面)
|
检索给定 PageObject 的页码 |
page ( PageObject ) – 获取页码的页面。应该是一个实例PageObject
|
页码 或 -1(找不到页面) | 整数 |
getXmpMetadata ( )
|
从 PDF 文档根检索 XMP(可扩展元数据平台)数据 |
XmpInformation 可用于从文档访问 XMP 元数据的实例
|
XmpInformation 或者 None 如果在文档根目录中未找到元数据
|
2.PdfFileMerger()
PdfFileMerger
(严格=真)
含义:初始化 PdfFileMerger 对象。PdfFileMerger 将多个 PDF 合并为一个 PDF。它可以连接、切片、插入或以上任意组合。
参数: |
严格( bool ) - 确定是否应警告用户所有问题,并导致一些可纠正的问题成为致命的。默认为True .
|
---|
方法名 | 含义 | 参数 |
---|---|---|
addBookmark ( title , pagenum , parent=None )
|
向此 PDF 文件添加书签。 |
title ( str ) – 用于此书签的标题。 pagenum ( int ) – 此书签将指向的页码。 parent – 对父书签的引用以创建嵌套书签。 |
addMetadata (信息)
|
将自定义元数据添加到输出。 |
infos ( dict ) – 一个 Python 字典,其中每个键都是一个字段,每个值都是您的新元数据。例: |
addNamedDestination (标题,页码)
|
向输出添加目的地 。 |
title ( str ) – 要使用的标题 pagenum ( int ) – 此目标指向的页码 |
pages=None , import_bookmarks=True ) |
与该merge() 方法相同,但假设您希望将所有页面连接到文件末尾而不是指定位置
|
fileobj – 文件对象或支持类似于文件对象的标准读取和查找方法的对象。也可以是表示 PDF 文件路径的字符串。 bookmark ( str ) – 可选地,您可以通过提供书签的文本来指定要在包含文件的开头应用的书签。 pages - 可以是一个Page Range或一个元组,用于将源文档中的指定范围的页面合并到输出文档中。 import_bookmarks ( bool ) – 您可以通过将其指定为 来阻止源文档的书签被导入 |
close ( )
|
关闭所有文件描述符(输入和输出)并清除所有内存使用。 | |
ne,pages=None , import_bookmarks=True ) |
将给定文件中的页面合并到指定页码处的输出文件中。 |
position ( int ) –要插入此文件的页码。文件将被插入到给定的数字之后。 fileobj – 文件对象或支持类似于文件对象的标准读取和查找方法的对象。也可以是表示 PDF 文件路径的字符串。 bookmark ( str ) – 可选地,您可以通过提供书签的文本来指定要在包含文件的开头应用的书签。 pages - 可以是一个Page Range或一个元组,用于将源文档中的指定范围的页面合并到输出文档中。 import_bookmarks ( bool ) – 您可以通过将其指定为 来阻止源文档的书签被导入 |
setPageLayout (布局)
|
设置页面布局 | layout ( str ) – 要使用的页面布局 |
setPageMode (模式)
|
设置页面模式。 | mode ( str ) – 要使用的页面模式。 |
write ( 文件对象)
|
写入已合并到给定输出文件的所有数据。 | fileobj – 输出文件。可以是文件名或任何类型的类文件对象。 |
3.PageObject
()
PageObject
(pdf=None,indirectRef=None )
含义:此类表示 PDF 文件中的单个页面。通常这个对象会通过访问类的getPage()
方法 来创建 PdfFileReader
,但也可以使用createBlankPage()
静态方法创建一个空页面 。
参数: |
|
---|
方法名 | 含义 | 参数 |
---|---|---|
|
将转换矩阵应用于页面。 | ctm ( tuple ) – 包含变换矩阵操作数的 6 元素元组。 |
|
通过加入所有内容流并应用 FlateDecode 过滤器来压缩此页面的大小。 但是,如果由于某种原因内容流压缩变为“自动”,则此功能可能不会执行任何操作。 |
|
|
按照内容流中提供的顺序定位所有文本绘制命令,然后提取文本。这对某些 PDF 文件效果很好,但对其他文件效果不佳,具体取决于所使用的生成器。这将在未来细化。不要依赖于这个函数的文本顺序,因为如果这个函数变得更复杂,它会改变。 | 一个 unicode 字符串对象。 |
|
访问页面内容。 |
/Contents 对象,或者None 如果它不存在。 /Contents 是可选的
|
|
将两个页面的内容流合并为一个。资源引用(即字体)由两个页面维护。此页面的媒体框/裁剪框/等未更改。参数页面的内容流将被添加到此页面的内容流的末尾,这意味着它将在此页面之后或“顶部”绘制。 |
page2 ( PageObject ) – 要合并到这个页面的页面。应该是 的一个实例PageObject 。
|
|
这类似于mergePage,但要合并的流是通过应用转换矩阵来旋转的 |
page2 ( PageObject ) – 要合并到这个页面的页面。应该是 的一个实例 旋转(float)–旋转的角度,以度为单位 expand ( bool ) – 是否应扩展页面以适合要合并的页面的尺寸。 |
|
这类似于mergePage,但要合并的流通过应用变换矩阵进行旋转和缩放。 |
page2 ( PageObject ) – 要合并到这个页面的页面。应该是 的一个实例 旋转(float)–旋转的角度,以度为单位 scale ( float ) – 缩放因子expand ( bool ) – 是否应扩展页面以适合要合并的页面的尺寸。 |
|
这类似于mergePage,但要合并的流通过应用转换矩阵进行平移、旋转和缩放。 |
page2 ( PageObject ) – 要合并到这个页面的页面。应该是 的一个实例 tx ( float ) – X 轴上的平移 ty ( float ) – Y 轴上的平移 旋转(float)–旋转的角度,以度为单位 scale ( float ) – 缩放因子 expand ( bool ) – 是否应扩展页面以适合要合并的页面的尺寸。 |
|
这类似于mergePage,但要合并的流通过应用转换矩阵进行旋转和平移。 |
page2 ( PageObject ) – 要合并到这个页面的页面。应该是 的一个实例 tx ( float ) – X 轴上的平移 ty ( float ) – Y 轴上的平移 旋转(float)–旋转的角度,以度为单位 expand ( bool ) – 是否应扩展页面以适合要合并的页面的尺寸。 |
|
这类似于mergePage,但要合并的流是通过应用转换矩阵来缩放的。 |
page2 ( PageObject ) – 要合并到这个页面的页面。应该是 的一个实例 scale ( float ) – 缩放因子 expand ( bool ) – 是否应扩展页面以适合要合并的页面的尺寸。 |
|
这类似于mergePage,但要合并的流通过应用转换矩阵进行转换和缩放。 |
page2 ( PageObject ) – 要合并到这个页面的页面。应该是 的一个实例 scale ( float ) – 缩放因子 tx ( float ) – X 轴上的平移 ty ( float ) – Y 轴上的平移 expand ( bool ) – 是否应扩展页面以适合要合并的页面的尺寸。 |
|
这类似于mergePage,但转换矩阵应用于合并的流。 |
page2 ( PageObject ) – 要合并到这个页面的页面。应该是 的一个实例 ctm ( tuple ) – 包含变换矩阵操作数的 6 元素元组 expand ( bool ) – 是否应扩展页面以适合要合并的页面的尺寸。 |
|
这类似于mergePage,但要合并的流是通过应用转换矩阵来转换的。 |
page2 ( PageObject ) – 要合并到这个页面的页面。应该是 的一个实例 tx ( float ) – X 轴上的平移 ty ( float ) – Y 轴上的平移 expand ( bool ) – 是否应扩展页面以适合要合并的页面的尺寸。 |
|
以 90 度为增量顺时针旋转页面。 | 角度( int ) – 旋转页面的角度。必须是 90 度的增量 |
|
以 90 度为增量逆时针旋转页面。 | 角度( int ) – 旋转页面的角度。必须是 90 度的增量 |
|
通过将转换矩阵应用于其内容并更新页面大小,按给定因子缩放页面。 |
sx ( float ) – 水平轴上的缩放因子。 sy ( float ) – 垂直轴上的缩放因子。 |
|
通过将转换矩阵应用于其内容并更新页面大小,按给定因子缩放页面。 | factor ( float ) – 缩放因子(对于 X 和 Y 轴)。 |
|
通过将转换矩阵应用于其内容并更新页面大小,将页面缩放到指定的尺寸。 |
width ( float ) – 新的宽度。 height ( float ) – 新的高度。 |
4.PdfFileWriter()
PdfFileWriter
含义:给定由另一个类(通常为PdfFileReader
)生成的页面,此类支持写出 PDF 文件。
方法名 | 含义 | 参数 | 返回 | 返回类型 |
---|---|---|---|---|
|
在 PDF 中嵌入文件。 |
fname ( str ) – 要显示的文件名。 fdata ( str ) – 文件中的数据。 |
||
|
将空白页附加到此 PDF 文件并返回。如果未指定页面大小,则使用最后一页的大小。 |
width ( float ) – 以默认用户空间单位表示的新页面的宽度。 height ( float ) – 以默认用户空间单位表示的新页面的高度。 |
||
, color=None , bold=False , italic=False , fit='/Fit' , *args ) |
向此 PDF 文件添加书签。 |
title ( str ) – 用于此书签的标题。 pagenum ( int ) – 此书签将指向的页码。 parent – 对父书签的引用以创建嵌套书签。 color ( tuple ) – 书签的颜色为从 0.0 到 1.0 的红、绿、蓝元组 粗体( bool ) – 书签为粗体 斜体( bool ) – 书签为斜体 fit ( str ) – 目标页面的适合度。详情请参阅 |
||
|
添加将在打开此 PDF 时启动的 Javascript。 | javascript ( str ) – 你的 Javascript。 | ||
rect , border=None , fit='/Fit' , *args ) |
添加从矩形区域到指定页面的内部链接。 |
pagenum ( int ) – 放置链接的页面的索引。 pagedest ( int ) – 链接应该转到的页面的索引。 rect – border - 如果提供,则是一个描述边框绘制属性的数组。有关详细信息,请参阅 PDF 规范。如果省略此参数,则不会绘制边框。 fit ( str ) – 页面适合或“缩放”选项(见下文)。可能需要提供其他参数。传递 |
||
|
将自定义元数据添加到输出。 | infos ( dict ) – 一个 Python 字典,其中每个键都是一个字段,每个值都是您的新元数据。 | ||
|
向此 PDF 文件添加页面。该页面通常是从PdfFileReader 实例中获取的 。
|
page ( PageObject ) – 要添加到文档的页面。应该是一个实例PageObject
|
||
|
将页面从读者复制到作者。包括一个可选的回调参数,在将页面附加到编写器后调用该参数。 |
reader – 一个 PdfFileReader 对象,从中复制页面注释到这个 writer 对象。 |
||
|
从 PDF 文件阅读器创建文档的副本(克隆) |
阅读器- 应从中创建克隆的 PDF 文件阅读器实例。 |
||
|
将读取器文档根目录复制到写入器。 | reader – 应复制文档根目录中的 PdfFileReader。 | ||
use_128bit=True ) |
使用 PDF 标准加密处理程序加密此 PDF 文件。 |
user_pwd ( str ) – “用户密码”,允许在提供的限制下打开和阅读 PDF 文件。 owner_pwd ( str ) – “所有者密码”,允许在没有任何限制的情况下打开 PDF 文件。默认情况下,所有者密码与用户密码相同。 use_128bit ( bool ) – 是否使用 128 位加密的标志。当为 false 时,将使用 40 位加密。默认情况下,此标志处于打开状态。 |
||
|
页数。 | 整数 | ||
|
从此 PDF 文件中按编号检索页面。 | pageNumber ( int ) – 要检索的页码(页面从零开始) | pageNumber给出的索引处的页面 |
PageObject
|
|
获取页面布局。有关setPageLayout() 有效布局的说明,请参见。
|
当前使用的页面布局。 | str, None 如果未指定 | |
|
获取页面模式。有关setPageMode() 有效模式的说明,请参见。
|
当前使用的页面模式。 | str, None 如果未指定 | |
height=None , index=0 ) |
在此 PDF 文件中插入一个空白页并将其返回。如果未指定页面大小,则使用最后一页的大小。 |
width ( float ) – 以默认用户空间单位表示的新页面的宽度。 height ( float ) – 以默认用户空间单位表示的新页面的高度。 index ( int ) – 添加页面的位置。 |
新添加的页面 |
PageObject
|
|
在此 PDF 文件中插入页面。该页面通常是从PdfFileReader 实例中获取的 。
|
page ( PageObject ) – 要添加到文档的页面。这个参数应该是 的一个实例 index ( int ) – 页面将被插入的位置。 |
||
|
从此输出中删除图像。 | ignoreByteStringObject ( bool ) – 忽略 ByteString 对象的可选参数。 | ||
|
从此输出中删除链接和注释。 | |||
|
从此输出中删除图像。 | ignoreByteStringObject ( bool ) – 忽略 ByteString 对象的可选参数。 | ||
|
设置页面布局 | layout ( str ) – 要使用的页面布局 | ||
|
设置页面模式。 | mode ( str ) – 要使用的页面模式。 | ||
|
从字段字典更新给定页面的表单字段值。将字段文本和值从字段复制到页面。 |
page – PDF writer 的页面参考,其中注释和字段数据将被更新。 fields – 字段名称 (/T) 和文本值 (/V) 的 Python 字典 |
||
|
将添加到此对象的页面集合作为 PDF 文件写出。 | stream -- 要写入文件的对象。该对象必须支持 write 方法和 tell 方法,类似于文件对象。 |
以上介绍了PyPDF2的四个主要类以及其中的方法名和具体用法。
三、代码演示---将pdf分割成自己想要的pdf
1.思路
现在网上的学习资料非常多,pdf也是如此,很多pdf都是书籍,一份pdf可能有上百页甚至上千页,这使得我们查具体资料的时候非常困难。
例:你现在有一本关于爬虫的书,有430页,当然,你基础知识是有的,只是你在写爬虫时经常忘记html解析的具体写法,如正则表达式、xpath语法的使用,这时如果你翻pdf,会发现步骤非常繁琐,首先你要找目录,根据目录来找到html解析的具体页数,最终通过滑动找到相应内容。而且如果你接着阅读pdf,等到下次要用到正则表达式、xpath语法时,你又得重新以上步骤,导致过程十分繁琐。
这时,你就可以运用以上知识,写一个代码,将你所需要的pdf从原pdf中"抠"出来。
2.代码与结果展示
看到这记得查看一下上面标红(平时用到比较多)的方法哦!!
from PyPDF2 import PdfFileReader, PdfFileWriter
def splitPDF():# C:\Users\knighthood\OneDrive\桌面\python合集\Python爬虫开发与项目实战.pdfreadFile = input('请输入原PDF的所在位置与名称:')# .\copy.pdf 该格式使得pdf在当前目录下outFile = input('请输入你要将生成的PDF保存的位置与名称:')# 调用PdfFileWriter()类pdfFileWriter = PdfFileWriter()# 获取PdfFileReader 对象pdfFileReader = PdfFileReader(readFile)# 文档总页数numPages = pdfFileReader.getNumPages()print("原文档有{}页".format(numPages))a = int(input('从哪一页开始:'))b = int(input('到哪一页结束:'))c = b-a+1# 显示新文档有几页print("新文档共有{}页".format(c))for i in range(a-1, b):page = pdfFileReader.getPage(i)pdfFileWriter.addPage(page)# 添加完每页,然后一起保存在outFile中with open(outFile, 'wb') as f:pdfFileWriter.write(f)
splitPDF()
分析:该代码主要使用PdfFileReader, PdfFileWriter这两类,一个读取,一下写入。首先定义一个函数,在函数中读取pdf,将读取的pdf存到新的pdf中。
运行程序时,首先你要输入原pdf和新生成的pdf的路径与名称(要带后缀),接下来你要输入pdf截取的页数开头和结尾,你可以在wps中查看。如下:
运行结果如下:
只不过有时候你截的pdf开头或者结尾会有不是相关内容的出现,如下:
但是这还是可以接受的,毕竟下一次阅读相关文档方便多了。
3.总结
使用该代码可以大幅度提高你查阅相关资料的速度,非常适用于对于我这样的懒人(记不住还不拿笔记在本子上)。
这篇万字文章就此完结,如果觉得写的不错的,希望点赞,这会是我接下来创作的动力!!
关于PDF的相关操作-----PyPDF2相关推荐
- Python爬虫:多线程的应用和pdf文件相关操作
多线程的应用 前程无忧岗位爬虫 import requests from re import search from multiprocessing import Process, Queue fro ...
- C++ PDF文档相关操作
人生总是在赶着一个又一个的期限,直到最后的大限. 近来基本没更新过博客,实在是准备雅思看英语加上调节老看英语后的烦躁心情闹的.本来以为考完研就与大考再也不见了,这种想法实在是 Too young,To ...
- Python自动化办公:pdf文档操作
在后台回复[阅读书籍] 即可获取python相关电子书~ Hi,我是山月. 之前给大家介绍了python处理excel.word.ppt的相关教程,不知道大家学的怎么样? 在后台回复[自动化办公]即可 ...
- Python基础教程:list相关操作
list相关操作小例子 获取list的下标和值 >>> mylist = ['a', 'b', 'c', 'd'] >>> for index, value in ...
- python怎么玩pdf_如何使用Python玩转PDF各种骚操作?
Portable Document Format(可移植文档格式),或者PDF是一种文件格式,可以用于跨操作系统的呈现和文档交换.尽管PDF最初是由Adobe发明的,但它现在是由国际标准化组织(ISO ...
- 如何使用Python玩转PDF各种骚操作?
点击"小詹学Python",选择"置顶"公众号 重磅干货,第一时间送达 本文转载自Python数据科学,禁二次转载 Portable Document Form ...
- 2021年大数据HBase(五):HBase的相关操作JavaAPI方式
全网最详细的大数据HBase文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 前言 HBase的相关操作-JavaAPI方式 一.需求说明 ...
- 2021年大数据HBase(四):HBase的相关操作-客户端命令式!【建议收藏】
全网最详细的大数据HBase文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 前言 HBase的相关操作-客户端命令式 1.进入HBase ...
- 2021年大数据Spark(二十五):SparkSQL的RDD、DF、DS相关操作
目录 RDD.DF.DS相关操作 SparkSQL初体验 SparkSession 应用入口 获取DataFrame/DataSet 使用样例类 指定类型+列名 自定义Schema ...
最新文章
- 多图片每隔2S循环播放
- 颠覆性技术丨无人驾驶
- IBM X3650 M4服务器安装centos找不到硬盘的解决方法
- SQL注入不能多句执行时的一种突破方法(SA权限)
- 计算机软件侵权责任,对计算机软件侵权行为认定标准
- 在Windows 7或Vista(或Windows 8.x,Sorta)上禁用Aero
- LoRaWAN开放式实验平台
- 微课|中学生可以这样学Python(5.6.1节):列表推导式3
- [转]rails常用验证方法
- java十次方项目链接 视频+资料+讲义
- 将计算机桌面分,win7电脑屏幕一分为4怎么设置_win7电脑屏幕分成四个区域操作方法...
- MDR的进阶版本-GMDR
- 如何搭建一个论坛社区网站?
- WebService CXF-RS技术之@Pathparam与@Queryparam注解区别
- Excel 2010 SQL应用116 分组统计之GROUP BY续
- Centos7 搭建NFS文件共享存储
- C/C++ 代码分析警告
- windows界面-python-运动倒计时程序
- ASP程序所使用的几种脚本语言
- 天凉了,别再吹寒风了!今年流行“防风防水防污裤”,保暖时髦又百搭!明星博主们都狂种草!...