python讀取pdf內(nèi)容?
代碼示例:
#!/usr/bin/env python3
#-*- coding:utf-8 -*-
# pip3 install pdfminer3k
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import LAParams, LTTextBoxHorizontal
from pdfminer.pdfparser import PDFParser, PDFDocument
from pdfminer.PDFinterp import PDFResourceManager, PDFPageInterpreter, PDFTextExtractionNotAllowed
from pdfminer.pdfdevice import PDFDevice
def read_pdf(pdf_name, result_name):
# 以二進制讀模式打開
fp = open(pdf_name, 'rb')
# 用文件對象來創(chuàng)建一個pdf文檔分析器
parser = PDFParser(fp)
# 創(chuàng)建一個pdf文檔
doc = PDFDocument()
# 連接分析器 與文檔對象
parser.set_document(doc)
doc.set_parser(parser)
# 提供初始密碼,如果沒有密碼 就創(chuàng)建一個空的字符串
doc.initialize('')
# 檢測文檔是否提供txt轉(zhuǎn)換,不提供就拋出異常
if not doc.is_extractable:
raise PDFTextExtractionNotAllowed
# 創(chuàng)建PDf 資源管理器 來管理共享資源
rsrcmgr = PDFResourceManager()
# 創(chuàng)建一個PDF設(shè)備對象
laparams = LAParams()
device = PDFPageAggregator(rsrcmgr, laparams=laparams)
# 創(chuàng)建一個PDF解釋器對象
interpreter = PDFPageInterpreter(rsrcmgr, device)
with open(result_name,"w",encoding="u8") as fd_out:
# 循環(huán)遍歷列表,每次處理一個page的內(nèi)容
for i,page in enumerate(doc.get_pages(),1):
index = "===========《第{}頁》===========".format(i)
print(index)
fd_out.write(index + "\n")
interpreter.process_page(page)
# 接受該頁面的LTPage對象
layout = device.get_result()
for x in layout:
# 這里layout是一個LTPage對象 里面存放著 這個page解析出的各種對象 一般包括LTTextBox,
# LTFigure, LTImage, LTTextBoxHorizontal 等等 想要獲取文本就獲得對象的text屬性
if not isinstance(x, LTTextBoxHorizontal):
continue
results = x.get_text()
print(results)
fd_out.write(results)
if __name__ == '__main__':
pdf_name = 'test.pdf'
result = 'test.txt'
read_pdf(pdf_name, result)