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访问该getNamedDestinations()函数的只读属性
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)
输出结果:
documentInfo = {'/Title': IndirectObject(157, 0), '/Producer': IndirectObject(158, 0), '/Creator': IndirectObject(159, 0), '/CreationDate':
IndirectObject(160, 0), '/ModDate': IndirectObject(160, 0), '/Keywords': IndirectObject(161, 0), '/AAPL:Keywords': IndirectObject(162, 0)} 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
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 写⼊操作:
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 ⽂档的最后最后⼀页写⼊了⼀个空⽩页。
分割⽂档(取第五页之后的页⾯)
python怎么读取py文件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()
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小时内删除。
发表评论