python 读取pdf文件有3个扩展包 pdfminer3k(python2中为pdfminer)、fitz和pymupdf
1.pdfminer3k
读取并获得pdf文档中的信息:
from pdfminer.pdfparser import PDFParser,PDFDocument
from pdfminer.pdfinterp import PDFResourceManager,PDFPageInterpreter,PDFTextExtractionNotAllowed
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import LTTextBoxHorizontal,LAParams,LTTextLineHorizontal,LTFigure,LTRect,LTLine,LTCurve
# 文件对象
pd_file = open("d.pdf", "rb")
# pdf文件解析对象
parser = PDFParser(pd_file)
# print(parser)
# pdf文档对象
document = PDFDocument()
parser.set_document(document)
document.set_parser(parser)
# 初始化文档密码
document.initialize()
if document.is_extractable:
print(True)
else:
raise PDFTextExtractionNotAllowed
# 存储文档资源
src = PDFResourceManager()
# 设备对象
device = PDFPageAggregator(src,laparams=LAParams())
# 解释器对象
inter = PDFPageInterpreter(src,device)
pages = document.get_pages()
for page in pages:
#print(page.contents)
inter.process_page(page)
layout = device.get_result()
for x in layout:
if isinstance(x, LTTextBoxHorizontal):
print(str(x.get_text()))
#t = dir(x)
#print(t)
#print(type(x))
以上代码属于搬运工 (~自带笑哭表情~~~)
上述代码中各个对象的作用:
文件解析对象(PDFParser):从文件中提取数据
文档对象(PDFDocument): 保存提取到的数据
资源对象(PDFResourceManager):保存共享内容
设备对象(PDFDevice):处理资源对象为我们所需要的格式
解释器对象(PDFPageInterpreter): 处理页面内容
layout : 包含文档的全部内容对象主要包含:
LTPage:页面对象
LTTextBox:代表一个区域内的文字信息,包含多个LTTextLine,get_text()方法可以获得文本内容。
LTTextLine:代表一行文字信息,包含多个LTChar,get_text()方法可以获得文本内容。
LTChar:代表一个字符信息,get_text()方法可以获得文本内容。
LTAnno:代表文本中的字符的Unicode字符串。
LTFigure:代表PDF的表单对象,可以包含图形或图片。
LTImage:代表一个图片对象。
LTLine : 代表一条直线。
LTRect:代表一个矩形区域。
LTCurve:代表一条曲线。
tip:LTTextBox、LTTextLine可以分别和Horizontal、Vertical 组合表示水平方向和垂直方向
文档对象(Document)常用属性和方法:
doc.get_outlines(): 获取文档的目录数据
doc.is_extractable(): 判断文档是否支持转文字
doc.get_pages(): 获取所有页面对象
doc.initialize():初始化文档密码
doc.set_parser():绑定文档解析对像
内容对象(LTTextBox、LTTextLine、LTImage...等等)常用属性和方法:
LTImage:
LTImage.get_rawdata(): 获取图片数据
2. fitz 包:
参考:https://blog.csdn.net/qq_15969343/article/details/81673302
3.pymupdf包:
操作pdf文件,可以实现创建pdf文件、修改pdf文件等等。。功能强大。(以后补充...)