python不可以处理pdf⽂件_Python实现PyPDF2处理PDF⽂件
的⽅法⽰例
实际应⽤中,可能会涉及处理 pdf ⽂件,PyPDF2 就是这样⼀个库,使⽤它可以轻松的处理 pdf ⽂件,它提供了读,割,合并,⽂件转换等多种操作。
PyPDF2 安装
PyCharm 安装:File -> Default Settings -> Project Interpreter
python怎么读取py文件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))) #
# 获取 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 =
pageNumber = 0
index = 1 , pageObj =
pageNumber = 1
index = 2 , pageObj =
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 ⽂档的最后最后⼀页写⼊了⼀个空⽩页。
分割⽂档(取第五页之后的页⾯)
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:
# 依次循环打开要合并⽂件
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论