pdf 轉 word
阿新 • • 發佈:2020-12-01
程式設計環境: attrs==17.4.0 lxml==4.1.1 pdfminer3k==1.3.1 pluggy==0.6.0 ply==3.11 py==1.5.2 pytest==3.4.1 python-docx==0.8.6 six==1.11.0
from pdfminer.pdfparser import PDFParser, PDFDocument from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter from pdfminer.layout import LAParams from pdfminer.converter import PDFPageAggregator from pdfminer.pdfinterp import PDFTextExtractionNotAllowed from docx import Document document = Document() def parse(): # rb以二進位制讀模式開啟本地pdf檔案 fn = open('./111.pdf', 'rb') # 建立一個pdf文件分析器 parser = PDFParser(fn) # 建立一個PDF文件 doc = PDFDocument() # 連線分析器 與文件物件 parser.set_document(doc) doc.set_parser(parser) # 提供初始化密碼doc.initialize("lianxipython") # 如果沒有密碼 就建立一個空的字串 doc.initialize("") # 檢測文件是否提供txt轉換,不提供就忽略 if not doc.is_extractable: raise PDFTextExtractionNotAllowed else: # 建立PDf資源管理器 resource = PDFResourceManager() # 建立一個PDF引數分析器 laparams = LAParams() # 建立聚合器,用於讀取文件的物件 device = PDFPageAggregator(resource, laparams=laparams) # 建立直譯器,對文件編碼,解釋成Python能夠識別的格式 interpreter = PDFPageInterpreter(resource, device) # 迴圈遍歷列表,每次處理一頁的內容 # doc.get_pages() 獲取page列表 for page in doc.get_pages(): # 利用直譯器的process_page()方法解析讀取單獨頁數 interpreter.process_page(page) # 使用聚合器get_result()方法獲取內容 layout = device.get_result() # 這裡layout是一個LTPage物件,裡面存放著這個page解析出的各種物件 for out in layout: # 判斷是否含有get_text()方法,獲取我們想要的文字 if hasattr(out, "get_text"): # print(out.get_text(), type(out.get_text())) content = out.get_text().replace(u'\xa0', u' ') # 將'\xa0'替換成u' '空格,這個\xa0就是&nbps空格 # with open('test.txt','a') as f: # f.write(out.get_text().replace(u'\xa0', u' ')+'\n') document.add_paragraph( content, style='ListBullet' # 新增段落,樣式為unordered list型別 ) document.save('./111.docx') # 儲存這個文件 if __name__ == '__main__': parse()