Python深⼊浅出-PyPDF2处理PDF⽂件
实际应⽤中,可能会涉及处理 pdf ⽂件,PyPDF2 就是这样⼀个库,使⽤它可以轻松的处理 pdf ⽂件,它提供了读,割,合并,⽂件转换等多种操作。
⽂档地址:
PyPDF2 安装
PyCharm 安装:File -> Default Settings -> Project Interpreter
PdfFileReader
构造⽅法:
PyPDF2.PdfFileReader(stream,strict = True,warndest = None,overwriteWarnings = True)
初始化⼀个 PdfFileReader 对象,此操作可能需要⼀些时间,因为 PDF 流的交叉引⽤表被读⼊内存。
参数:
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
访问该函数的只读属性
属性和⽅法
描述PDF 读取操作:
输出结果:
# encoding:utf-8
from  PyPDF2 import  PdfFileReader, PdfFileWriter
readFile = 'C:/Users/Administrator/Desktop/RxJava 完全解析.pdf'# 获取 PdfFileReader 对象
pdfFileReader = PdfFileReader(readFile)  # 或者这个⽅式:pdfFileReader = PdfFileReader(open(readFile, 'rb'))# 获取 PDF ⽂件的⽂档信息
documentInfo = DocumentInfo()print('documentInfo = %s' % documentInfo)# 获取页⾯布局
pageLayout = PageLayout()print('pageLayout = %s ' % pageLayout)# 获取页模式
pageMode = PageMode()print('pageMode = %s' % pageMode)
xmpMetadata = XmpMetadata()print('xmpMetadata  = %s ' % xmpMetadata)# 获取 pdf ⽂件页数
pageCount = NumPages()print('pageCount = %s' % pageCount)for  index in  range(0, pageCount):    # 返回指定页编号的 pageObject
pageObj = Page(index)
print('index = %d , pageObj = %s' % (index, type(pageObj)))  # <class 'PyPDF2.pdf.PageObject'>    # 获取 pageObject 在 PDF ⽂档中处于的页码
pageNumber = PageNumber(pageObj)    print('pageNumber = %s ' % pageNumber)
PdfFileWriter
这个类⽀持 PDF ⽂件,给出其他类⽣成的页⾯。
属性和⽅法
描述
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 写⼊操作:
documentInfo = {'/Title': IndirectObject(157, 0), '/Producer': IndirectObject(158, 0), '/Creator': IndirectObject(159, 0), '/CreationDate': IndirectObject(pageLayout = None  pageMode = None xmpMetadata  = None  pageCount = 3
index = 0 , pageObj = <class  'PyPDF2.pdf.PageObject'>pageNumber = 0
index = 1 , pageObj = <class 'PyPDF2.pdf.PageObject'>pageNumber = 1
index = 2 , pageObj = <class 'PyPDF2.pdf.PageObject'>pageNumber = 2
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 = NumPages()    for  index in  range(0, numPages):
pageObj = Page(index)
pdfFileWriter.addPage(pageObj)  # 根据每页返回的 PageObject,写⼊到⽂件        pdfFileWriter.write(open(outFile, 'wb'))
pdfFileWriter.addBlankPage()  # 在⽂件的最后⼀页写⼊⼀个空⽩页,保存⾄⽂件中    pdfFileWriter.write(open(outFile,'wb'))
结果是:在写⼊的 copy.pdf ⽂档的最后最后⼀页写⼊了⼀个空⽩页。
分割⽂档(取第五页之后的页⾯)
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 = NumPages()python怎么读取py文件
if numPages > 5:
# 从第五页之后的页⾯,输出到⼀个新的⽂件中,即分割⽂档
for index in range(5, numPages):
pageObj = Page(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 = NumPages()
for index in range(0, numPages):
pageObj = Page(index)
pdfFileWriter.addPage(pageObj)
# 最后,统⼀写⼊到输出⽂件中
pdfFileWriter.write(open(outFile, 'wb'))
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, NumPages()):
pageObj = Page(i)
extractedText = actText()
content += extractedText + "\n"
# de("ascii", "ignore")
return content

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。