- pdfminer解析
首先给出pdfminer官网的说法,主要包含三张图片
这是pdfminer各个类之间的关系,首先使用PDFParser对文章解析,之后建立PDFDocument和PDFparser之间的关联
这张图描述的是解析出来的LTpage的各个内容,其包含识别出来的一个一个文本块(注意这里识别出来的是以空间为基础而不是逻辑上),一个LTPage包含多个LTTextBox文本块,每一个文本块又包含多个LTTextLine文本行,行内由各个字符组成.具体各个类型的含义如下
类型 |
含义 |
LTPage |
表达一个完整的页面 |
LTTextBox |
表达一个在矩形框中的各个文本块 |
LTTextLine |
表达单独一行文本,由多个LTChar组成 |
LTChar/ LTAnno |
表示一个真是的Unicode编码的字符 |
LTFigure |
表示一个由PDF表格对象使用的区域 |
LTImage |
表示一个图片对象,可以是JPEG等其它类型 |
LTRect |
表示一个矩形区域,用于分割区别其它类型 |
LTLine |
表示一个单独的文本行,用于作为其他图片文本之间的分割 |
LTCurve |
表达一个图片中的曲线 |
简单的代码使用
from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfpage import PDFPage
from pdfminer.pdfpage import PDFTextExtractionNotAllowed
from pdfminer.pdfinterp import PDFResourceManager
from pdfminer.pdfinterp import PDFPageInterpreter
from pdfminer.pdfdevice import PDFDevice
fp = open('mypdf.pdf', 'rb')
parser = PDFParser(fp)
document = PDFDocument(parser, password)
if not document.is_extractable:
raise PDFTextExtractionNotAllowed
rsrcmgr = PDFResourceManager()
device = PDFDevice(rsrcmgr)
interpreter = PDFPageInterpreter(rsrcmgr, device)
for page in PDFPage.create_pages(document):
interpreter.process_page(page)
from pdfminer.layout import LAParams
from pdfminer.converter import PDFPageAggregator
laparams = LAParams()
device = PDFPageAggregator(rsrcmgr, laparams=laparams)
interpreter = PDFPageInterpreter(rsrcmgr, device)
for page in PDFPage.create_pages(document):
interpreter.process_page(page)
layout = device.get_result()
for x in layout:
if isinstance(x, LTTextBox):
pass
'''
a = []
for x in layout:
a.append(x)
'''