实际应用中,可能会涉及处理 pdf 文件,PyPDF2 就是这样一个库,使用它可以轻松的处理 pdf 文件,它提供了读,割,合并,文件转换等多种操作。
文档地址:http://pythonhosted.org/PyPDF2/
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 = pdfFileReader.getDocumentInfo() print('documentInfo = %s' % documentInfo) # 获取页面布局 pageLayout = pdfFileReader.getPageLayout() print('pageLayout = %s ' % pageLayout) # 获取页模式 pageMode = pdfFileReader.getPageMode() print('pageMode = %s' % pageMode) xmpMetadata = pdfFileReader.getXmpMetadata() print('xmpMetadata = %s ' % xmpMetadata) # 获取 pdf 文件页数 pageCount = pdfFileReader.getNumPages() print('pageCount = %s' % pageCount) for index in range(0, pageCount): # 返回指定页编号的 pageObject pageObj = pdfFileReader.getPage(index) print('index = %d , pageObj = %s' % (index, type(pageObj))) # <class 'PyPDF2.pdf.PageObject'> # 获取 pageObject 在 PDF 文档中处于的页码 pageNumber = pdfFileReader.getPageNumber(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 = 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'))
结果是:在写入的 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 = 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'))
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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
- 雨林唱片《赏》新曲+精选集SACD版[ISO][2.3G]
- 罗大佑与OK男女合唱团.1995-再会吧!素兰【音乐工厂】【WAV+CUE】
- 草蜢.1993-宝贝对不起(国)【宝丽金】【WAV+CUE】
- 杨培安.2009-抒·情(EP)【擎天娱乐】【WAV+CUE】
- 周慧敏《EndlessDream》[WAV+CUE]
- 彭芳《纯色角3》2007[WAV+CUE]
- 江志丰2008-今生为你[豪记][WAV+CUE]
- 罗大佑1994《恋曲2000》音乐工厂[WAV+CUE][1G]
- 群星《一首歌一个故事》赵英俊某些作品重唱企划[FLAC分轨][1G]
- 群星《网易云英文歌曲播放量TOP100》[MP3][1G]
- 方大同.2024-梦想家TheDreamer【赋音乐】【FLAC分轨】
- 李慧珍.2007-爱死了【华谊兄弟】【WAV+CUE】
- 王大文.2019-国际太空站【环球】【FLAC分轨】
- 群星《2022超好听的十倍音质网络歌曲(163)》U盘音乐[WAV分轨][1.1G]
- 童丽《啼笑姻缘》头版限量编号24K金碟[低速原抓WAV+CUE][1.1G]