大家好,又见面了,我是你们的朋友全栈君。
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账号...