from pdfminer.layout import LAParams, LTTextBoxHorizontal, LTText, LTImage, LTFigure, LTTextBox, LTTextLine
from pdfminer.pdfinterp import PDFTextExtractionNotAllowed, PDFResourceManager, PDFPageInterpreter
from pdfminer.pdfparser import PDFParser, PDFDocument
#以二進制模式打開文件
path = 'my_pdf.pdf'
fp = open(path,'rb')
#創(chuàng)建一個pdf文檔分析器
praser = PDFParser(fp)
# 創(chuàng)建一個PDF文檔
doc = PDFDocument()
#連接分析器和文檔對象
praser.set_document(doc)
doc.set_parser(praser)
# 提供初始化密碼荤牍,如果沒有就創(chuàng)建一個空的字符串
doc.initialize()
# 檢測文檔是否提供txt轉(zhuǎn)化珊搀,不提供就忽略
if not doc.is_extractable:
raise PDFTextExtractionNotAllowed
else:
# 創(chuàng)建資源管理器來管理共享資源
rsrcmgr = PDFResourceManager()
#創(chuàng)建一個pdf設備對象
laparams = LAParams()
device = PDFPageAggregator(rsrcmgr,laparams=laparams)
#創(chuàng)建一個pdf解釋器對象
interpreter = PDFPageInterpreter(rsrcmgr,device)
#循環(huán)遍歷列表,每次處理一個page內(nèi)容
for page in doc.get_pages():
interpreter.process_page(page)
#接受該頁面的LTPage對象
layout = device.get_result()
# 這里layout是一個LTPage對象 里面存放著 這個page解析出的各種對象 一般包括LTTextBox, LTFigure, LTImage, LTTextBoxHorizontal 等等 想要獲取文本就獲得對象的text屬性蝌麸,
for x in layout:
if isinstance(x,LTTextBox) or isinstance(x,LTTextLine):
with open('文本.txt','a') as f:
text = x.get_text()
print(text)
f.write(text)
# if (isinstance(x, LTImage)):
# with open('圖片.png', 'a') as f:
# image = x.imagemask
# print(image)
# f.write(image)
# if (isinstance(x, LTTextBoxHorizontal)):
# with open('文本.txt', 'a') as f:
# results = x.get_text()
# print(results)
# # f.write(results)
pdfminer3k只適合于保存字符串