雖然這個問題的代碼網上都找的到,但是每個都運行不了,我這個pdf檔案中的文字不可以編輯(不是加密了)就是導不出來,好急啊,哪位大神知道,幫幫忙唄!!!小弟感激不盡啊。代碼有一串,但是就是老是報錯,說from pdfminer.pdfparser import PDFParser,PDFDocument 中的PDFDocument匯入不了。還有from pdfminer.pdfinterp import PDFTextExtractionNotAllowed這個也是的,就是這兩個報錯,搞了兩天了,就是找不到解決的辦法,我也是醉了
import sys
import importlib
importlib.reload(sys)
from pdfminer.pdfparser import PDFParser,PDFDocument
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import *
from pdfminer.pdfinterp import PDFTextExtractionNotAllowed
'''
決議pdf檔案,獲取檔案中包含的各種物件
'''
# 決議pdf檔案函式
def parse(pdf_path):
fp = open(pdf_path, 'rb') # 以二進制讀模式打開
# 用檔案物件來創建一個pdf檔案分析器
parser = PDFParser(fp)
# 創建一個PDF檔案
doc = PDFDocument()
# 連接分析器 與檔案物件
parser.set_document(doc)
doc.set_parser(parser)
# 提供初始化密碼
# 如果沒有密碼 就創建一個空的字串
doc.initialize()
# 檢測檔案是否提供txt轉換,不提供就忽略
if not doc.is_extractable:
raise PDFTextExtractionNotAllowed
else:
# 創建PDf 資源管理器 來管理共享資源
rsrcmgr = PDFResourceManager()
# 創建一個PDF設備物件
laparams = LAParams()
device = PDFPageAggregator(rsrcmgr, laparams=laparams)
# 創建一個PDF解釋器物件
interpreter = PDFPageInterpreter(rsrcmgr, device)
# 用來計數頁面,圖片,曲線,figure,水平文本框等物件的數量
num_page, num_image, num_curve, num_figure, num_TextBoxHorizontal = 0, 0, 0, 0, 0
# 回圈遍歷串列,每次處理一個page的內容
for page in doc.get_pages(): # doc.get_pages() 獲取page串列
num_page += 1 # 頁面增一
interpreter.process_page(page)
# 接受該頁面的LTPage物件
layout = device.get_result()
for x in layout:
if isinstance(x,LTImage): # 圖片物件
num_image += 1
if isinstance(x,LTCurve): # 曲線物件
num_curve += 1
if isinstance(x,LTFigure): # figure物件
num_figure += 1
if isinstance(x, LTTextBoxHorizontal): # 獲取文本內容
num_TextBoxHorizontal += 1 # 水平文本框物件增一
# 保存文本內容
with open(r'test.txt', 'a') as f:
results = x.get_text()
f.write(results + '\n')
print('物件數量:\n','頁面數:%s\n'%num_page,'圖片數:%s\n'%num_image,'曲線數:%s\n'%num_curve,'水平文本框:%s\n'
%num_TextBoxHorizontal)
if __name__ == '__main__':
pdf_path = r'C:\Users\fanyu\Desktop\pdf\test.pdf'
parse(pdf_path)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/11739.html
