PyPDF2模块[通俗易懂]

PyPDF2模块[通俗易懂]1、PdfFileReader构造方法:PyPDF2.PdfFileReader(stream,strict=True,warndest=None,overwriteWarnings=True)stream:*File对象或支持与File对象类似的标准读取和查找方法的对象,也可以是表示PDF文件路径的字符串。*strict(bool):确定是否应该警告用户所用的…

大家好,又见面了,我是你们的朋友全栈君。

1、PdfFileReader

构造方法:

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

stream:*File 对象或支持与 File 对象类似的标准读取和查找方法的对象,也可以是表示 PDF 文件路径的字符串。*
strict(bool): 确定是否应该警告用户所用的问题,也导致一些可纠正的问题是致命的,默认是 True
warndest : 记录警告的目标(默认是 sys.stderr)
overwriteWarnings(bool):确定是否 warnings.py 用自定义实现覆盖 Python 模块(默认为 True)


PdfFileReader 对象的属性和方法

属性和方法																		描述
getDestinationPageNumber(destination)			检索给定目标对象的页码
getDocumentInfo()												检索 PDF 文件的文档信息字典
getFields(tree = None,retval = None,fileObj= None)	如果此 PDF 包含交互式表单字段,则提取字段数据,
getFormTextFields()								从文档中检索带有文本数据(输入,下拉列表)的表单域
getNameDestinations(tree = None,retval= None)			检索文档中的指定目标
getNumPages()														计算此 PDF 文件中的页数
getOutlines(node = None,outline = None,)				检索文档中出现的文档大纲
getPage(pageNumber)											从这个 PDF 文件中检索指定编号的页面
getPageLayout()														获取页面布局
getPageMode()														获取页面模式
getPageNumber(pageObject)									检索给定 pageObject 处于的页码
getXmpMetadata()													从 PDF 文档根目录中检索 XMP 数据
isEncrypted																显示 PDF 文件是否加密的只读布尔属性
namedDestinations													访问该getNamedDestinations()函数的只读属性

练习:

from PyPDF2 import PdfFileReader,PdfFileWriter
filer=r"C:\Users\________________MRlv\Desktop\Python项目开发实战+第2版.pdf"
#获取pdfFileReader对象
pdfFileReader =PdfFileReader(filer)
# print(pdfFileReader )
#获取文档信息
documentInfo=pdfFileReader.getDocumentInfo()
print("documentInfo={}".format(documentInfo))
#获取页面布局
pageLayout=pdfFileReader.getPageLayout()
print("pageLayout={}".format(pageLayout))
#获取页面模式
PageMode=pdfFileReader.getPageMode()
print("PageMode={}".format(PageMode))

xmpMetadata=pdfFileReader.getXmpMetadata()
print("xmpMetadata={}".format(xmpMetadata))

#获取PDF文件页数
PageNumber=pdfFileReader.getNumPages()
print("PageNumber={}".format(PageNumber))
for index in range(0,PageNumber):
    # 返回指定页编号的 pageObject
    pageobj=pdfFileReader.getPage(index)
    print('index = {} , pageObj = {}'.format (index, type(pageobj)))  # <class 'PyPDF2.pdf.PageObject'>
    # 获取 pageObject 在 PDF 文档中处于的页码
    PageNumber=pdfFileReader.getPageNumber(pageobj)
    print("PageNumber={}".format(PageNumber))

2、PdfFileWriter

属性和方法																	描述
addAttachment(fname,fdata)									在 PDF 中嵌入文件
addBlankPage(width= None,height=None)				追加一个空白页面到这个 PDF 文件并返回它
addBookmark(title,pagenum,parent=None,
color=None,bold=False,italic=False,fit=’/fit,*args’)	
addJS(javascript)											添加将在打开此 PDF 是启动的 javascript
addLink(pagenum,pagedest,rect,border=None,fit=’/fit’,*args)	从一个矩形区域添加一个内部链接到指定的页面
addPage(page)			添加一个页面到这个PDF 文件,该页面通常从 PdfFileReader 实例获取
getNumpages()														页数
getPage(pageNumber)							从这个 PDF 文件中检索一个编号的页面
insertBlankPage(width=None,height=None,index=0)			插入一个空白页面到这个 PDF 文件并返回它,如果没有指定页面大小,就使用最后一页的大小
insertPage(page,index=0)	在这个 PDF 文件中插入一个页面,该页面通常从 PdfFileReader 实例获取
removeLinks()									从次数出中删除连接盒注释
removeText(ignoreByteStringObject = False)							从这个输出中删除图像
write(stream)								将添加到此对象的页面集合写入 PDF 文件

pdf写操作

def addBlankpage():
    readFile = 'C:/Users/Administrator/Desktop/RxJava 完全解析.pdf'
    outFile = 'C:/Users/Administrator/Desktop/copy.pdf'
    pdfFileWriter = PdfFileWriter()

    # 获取 PdfFileReader 对象
    pdfFileReader = PdfFileReader(readFile)  # 或者这个方式:pdfFileReader = 	  											PdfFileReader(open(readFile, 'rb'))
    numPages = pdfFileReader.getNumPages()#获取文档的总页数

    for index in range(0, numPages):
        pageObj = pdfFileReader.getPage(index)
        pdfFileWriter.addPage(pageObj)  # 根据每页返回的 PageObject,写入到文件
        pdfFileWriter.write(open(outFile, 'wb'))#写入文件内容

    pdfFileWriter.addBlankPage()   # 在文件的最后一页写入一个空白页,保存至文件中
    pdfFileWriter.write(open(outFile,'wb'))

分割文档

def splitPdf():
    readFile = 'C:/Users/Administrator/Desktop/RxJava 完全解析.pdf'
    outFile = 'C:/Users/Administrator/Desktop/copy.pdf'
    pdfFileWriter = PdfFileWriter()

    # 获取 PdfFileReader 对象
    pdfFileReader = PdfFileReader(readFile)  # 或者这个方式:pdfFileReader = PdfFileReader(open(readFile, 'rb'))
    # 文档总页数
    numPages = pdfFileReader.getNumPages()

    if numPages > 5:
        # 从第五页之后的页面,输出到一个新的文件中,即分割文档
        for index in range(5, numPages):
            pageObj = pdfFileReader.getPage(index)
            pdfFileWriter.addPage(pageObj)
        # 添加完每页,再一起保存至文件中
        pdfFileWriter.write(open(outFile, 'wb'))

合并文档

def mergePdf(inFileList, outFile):
    '''
    合并文档
    :param inFileList: 要合并的文档的 list
    :param outFile:    合并后的输出文件
    :return:
    '''
    pdfFileWriter = PdfFileWriter()
    for inFile in inFileList:
        # 依次循环打开要合并文件
        pdfReader = PdfFileReader(open(inFile, 'rb'))
        numPages = pdfReader.getNumPages()
        for index in range(0, numPages):
            pageObj = pdfReader.getPage(index)
            pdfFileWriter.addPage(pageObj)

        # 最后,统一写入到输出文件中
        pdfFileWriter.write(open(outFile, 'wb'))

3、PageObject

PageObject(pdf=None,indirectRef=None)

此类表示 PDF 文件中的单个页面,通常这个对象是通过访问 PdfFileReader 对象的 getPage() 方法来得到的,也可以使用 createBlankPage() 静态方法创建一个空的页面。

参数:

pdf : 页面所属的 PDF 文件。
indirectRef:将源对象的原始间接引用存储在其源 PDF 中

PageObject 对象的属性和方法

属性或方法	描述
static createBlankPage(pdf=None,width=None,height=None)	返回一个新的空白页面
extractText()	找到所有文本绘图命令,按照他们在内容流中提供的顺序,并提取文本
getContents()	访问页面内容,返回 Contents 对象或 None
rotateClockwise(angle)	顺时针旋转 90 度
scale(sx,sy)	通过向其内容应用转换矩阵并更新页面大小

粗略读取 PDF 文本内容

def getPdfContent(filename):
    pdf = PdfFileReader(open(filename, "rb"))
    content = ""
    for i in range(0, pdf.getNumPages()):
        pageObj = pdf.getPage(i)

        extractedText = pageObj.extractText()
        content += extractedText + "\n"
        # return content.encode("ascii", "ignore")
    return content

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/152356.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 机器学习(十)Mean Shift 聚类算法

    机器学习(十)Mean Shift 聚类算法一、mean shift 算法理论Mean shift 算法是基于核密度估计的爬山算法,可用于聚类、图像分割、跟踪等,因为最近搞一个项目,涉及到这个算法的图像聚类实现,因此这里做下笔记。(1)均值漂移的基本形式给定d维空间的n个数据点集X,那么对于空间中的任意点x的mean shift向量基本形式可以表示为:这个向量就是漂移向量,其中Sk表示的是数据集的点到x的距离小于球半径h

  • navicat15 激活码 3月最新注册码

    navicat15 激活码 3月最新注册码,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • Oracle创建本地数据库实例及配置「建议收藏」

    Oracle创建本地数据库实例及配置「建议收藏」        因为以前一直都是用的mysql的数据库,所以当新工作中用到Oracle数据库的时候,一时还有点不习惯,特别是一直连接的远程数据库,更是麻烦,所以就想在本地创建一个Oracle的数据库,然后导入数据库的备份文件方便使用。然而看似简单的东西,真正动起手来,却也还是花了好一会儿工夫也才解决。所以希望能够把安装的过程记录下来,不仅方便自己以后查阅,也能督促自己开始写博客(3年前就有这样的想…

  • ARM汇编:数据处理指令集:MOV、ADD、ADDS、ADC、SUB、SUBS、SBC、RSB、MUL、AND、ORR、EOR、BIC、CMP、TST、TEQ、LSL、LSR、ASR、RORV

    ARM汇编:数据处理指令集:MOV、ADD、ADDS、ADC、SUB、SUBS、SBC、RSB、MUL、AND、ORR、EOR、BIC、CMP、TST、TEQ、LSL、LSR、ASR、RORVARM指令集——数据处理指令数据处理指令有:MOV、ADD、ADDS、ADC、SUB、SUBS、SBC、RSB、MUL、AND、ORR、EOR、BIC、CMP、TST、TEQ、LSL、LSR、ASR、RORV数据处理指令语法&lt;操作{&lt;cond&gt;}{S}&gt;&lt;Rd&gt;,&lt;Rn&gt…

  • 详解布隆过滤器原理,及分布式运用方法_布隆过滤器最小误差

    详解布隆过滤器原理,及分布式运用方法_布隆过滤器最小误差1.什么是布隆过滤器布隆过滤器是一个叫“布隆”的人提出的,本质上布隆过滤器是一种数据结构,比较巧妙的概率型数据结构(probabilisticdatastructure)。它本身是一个很长的二进制向量,特点是高效地插入和查询,可以用来确定“某一条数据一定不存在或者可能存在一个集合中”。相比于传统的List、Set、Map等数据结构,它更高效、占用空间更少(因为是个二进制的向量),但是缺点是其返回的结果是概率性的,而不是确切的。2.布隆过滤器数据结构布隆过滤器是一个bit向量或者

  • ssl服务器原理,SSL的工作原理[通俗易懂]

    ssl服务器原理,SSL的工作原理[通俗易懂]原标题:SSL的工作原理SSL的工作原理中包含如下三个协议:1、握手协议握手协议是客户端和服务器用于与SSL连接通信的第一个子协议。握手协议包括客户端和服务器之间的一系列消息。SSL中最复杂的协议是握手协议。该协议允许服务器和客户端相互进行身份验证,协商加密和MAC算法,以及保密SSL密钥以保护SSL记录中发送的数据。在应用程序的数据传输之前使用握手协议。2、记录协议在客户端和服务器握手成功之后…

    2022年10月30日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号