安裝pdfminer模塊
pip3 install pdfminer3k
import sys
import importlib
import time
importlib.reload(sys)
time1 = time.time()
from pdfminer.pdfparser import PDFParser, PDFDocument
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import LTTextBoxHorizontal, LAParams
from pdfminer.pdfinterp import PDFTextExtractionNotAllowed
'''
解析pdf 文本幕帆,保存到txt文件中
'''
# path = r'D:/PycharmProjects/核實清單.pdf'
def parse(pdf_path, txt_path):
fp = open(pdf_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)建PDf 資源管理器 來管理共享資源
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(): # doc.get_pages() 獲取page列表
interpreter.process_page(page)
# 接受該頁面的LTPage對象
layout = device.get_result()
# 這里layout是一個LTPage對象 里面存放著 這個page解析出的各種對象
# 一般包括LTTextBox, LTFigure, LTImage, LTTextBoxHorizontal 等等
# 想要獲取文本就獲得對象的text屬性您访,
for x in layout:
if (isinstance(x, LTTextBoxHorizontal)):
with open(txt_path, 'a') as f:
results = x.get_text()
print(results)
f.write(results + '\n')
if __name__ == '__main__':
pdf_path = r'D:/PycharmProjects/核實清單.pdf'
txt_path = r'D:/PycharmProjects/22.txt'
parse(pdf_path, txt_path)
time2 = time.time()
print("總共消耗時間為:", time2 - time1)