本文實(shí)例講述了Python實(shí)現(xiàn)pdf文檔轉(zhuǎn)txt的方法。分享給大家供大家參考,具體如下:
首先,這是一個(gè)比較粗糙的版本,因?yàn)橐呀?jīng)夠用了,而且對(duì)pdf的格式不熟悉,所以暫時(shí)沒有進(jìn)一步優(yōu)化。
還有,這是轉(zhuǎn)成txt的,所以如果是有圖片的pdf是無法保存圖片的。
至于本來就是圖片的文本,這里是無法分析出來的。那些圖片的pdf,估計(jì)要用圖形匹配的方式來處理,類似于超速拍攝的車牌識(shí)別。
不過這樣的程度,已經(jīng)不是文本處理了。扯遠(yuǎn)了。。。
轉(zhuǎn)出來的文字,好像按照pdf里面的所展示的來換行了,看不到有什么規(guī)則還原,我也不知道怎么處理,將就著用吧。
另外,初始代碼是網(wǎng)上找的,最初地址不知道哪里了。
用到了第三方庫pdfminier
pdfminer庫的地址 https://pypi.python.org/pypi/pdfminer3k
下載后,用cmd執(zhí)行命令 setup.py install
安裝完之后打開eclipse會(huì)彈出要求加載一些東西,點(diǎn)擊確定就行了。
再來看看代碼:
import os.pathfrom pdfminer.pdfparser import PDFParser,PDFDocumentfrom pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreterfrom pdfminer.converter import PDFPageAggregatorfrom pdfminer.layout import LTTextBoxHorizontal,LAParamsfrom pdfminer.pdfinterp import PDFTextExtractionNotAllowedclass CPdf2TxtManager(): ''''' classdocs ''' def __init__(self): ''''' Constructor ''' def changePdfToText(self, filePath): file = open(path, 'rb') # 以二進(jìn)制讀模式打開 #用文件對(duì)象來創(chuàng)建一個(gè)pdf文檔分析器 praser = PDFParser(file) # 創(chuàng)建一個(gè)PDF文檔 doc = PDFDocument() # 連接分析器 與文檔對(duì)象 praser.set_document(doc) doc.set_parser(praser) # 提供初始化密碼 # 如果沒有密碼 就創(chuàng)建一個(gè)空的字符串 doc.initialize() # 檢測文檔是否提供txt轉(zhuǎn)換,不提供就忽略 if not doc.is_extractable: raise PDFTextExtractionNotAllowed # 創(chuàng)建PDf 資源管理器 來管理共享資源 rsrcmgr = PDFResourceManager() # 創(chuàng)建一個(gè)PDF設(shè)備對(duì)象 laparams = LAParams() device = PDFPageAggregator(rsrcmgr, laparams=laparams) # 創(chuàng)建一個(gè)PDF解釋器對(duì)象 interpreter = PDFPageInterpreter(rsrcmgr, device) pdfStr = '' # 循環(huán)遍歷列表,每次處理一個(gè)page的內(nèi)容 for page in doc.get_pages(): # doc.get_pages() 獲取page列表 interpreter.process_page(page) # 接受該頁面的LTPage對(duì)象 layout = device.get_result() # 這里layout是一個(gè)LTPage對(duì)象 里面存放著 這個(gè)page解析出的各種對(duì)象 一般包括LTTextBox, LTFigure, LTImage, LTTextBoxHorizontal 等等 想要獲取文本就獲得對(duì)象的text屬性, for x in layout: if (isinstance(x, LTTextBoxHorizontal)): pdfStr = pdfStr + x.get_text() + '/n' fileNames = os.path.splitext(filePath) file2 = open(fileNames[0] + '.txt','wb')#保存這些內(nèi)容 file2.write(pdfStr.encode()) file2.close() file.close()if __name__ == '__main__': ''''' 解析pdf 文本,保存到txt文件中 ''' path = r'C:/Users/Administrator/Desktop/《精力管理》.pdf' pdf2TxtManager = CPdf2TxtManager() pdf2TxtManager.changePdfToText(path)
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
新聞熱點(diǎn)
疑難解答
圖片精選