首先,下載所需要的庫(kù) 1 :pdfminer 安裝庫(kù)命令: pip install pdfminer3k 2: docx 安裝庫(kù)命令: pip install python_docx 開始正餐: (注意:pdf中非圖片構(gòu)成的部分才能被成功轉(zhuǎn)換) 1#-*- coding: UTF-8 -*- 2#!/usr/bin/python 3# -*- coding: utf-8 -*- 4 5import sys 6import importlib 7importlib.reload(sys) 8 9from pdfminer.pdfparser import PDFParser,PDFDocument 10from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter 11from pdfminer.converter import PDFPageAggregator 12from pdfminer.layout import * 13from pdfminer.pdfinterp import PDFTextExtractionNotAllowed 14import os 15 16#設(shè)置工作目錄文件夾 17os.chdir(r'c:/users/dicey/desktop/codes/pdf-docx') 18 19''' 20解析pdf文件,獲取文件中包含的各種對(duì)象 21''' 22# 解析pdf文件函數(shù) 23def parse(pdf_path): 24 fp = open('diya.pdf', 'rb') # 以二進(jìn)制讀模式打開 25 # 用文件對(duì)象來(lái)創(chuàng)建一個(gè)pdf文檔分析器 26 parser = PDFParser(fp) 27 # 創(chuàng)建一個(gè)PDF文檔 28 doc = PDFDocument() 29 # 連接分析器 與文檔對(duì)象 30 parser.set_document(doc) 31 doc.set_parser(parser) 32 33 # 提供初始化密碼 34 # 如果沒(méi)有密碼 就創(chuàng)建一個(gè)空的字符串 35 doc.initialize() 36 37 # 檢測(cè)文檔是否提供txt轉(zhuǎn)換,不提供就忽略 38 if not doc.is_extractable: 39 raise PDFTextExtractionNotAllowed 40 else: 41 # 創(chuàng)建PDf 資源管理器 來(lái)管理共享資源 42 rsrcmgr = PDFResourceManager() 43 # 創(chuàng)建一個(gè)PDF設(shè)備對(duì)象 44 laparams = LAParams() 45 device = PDFPageAggregator(rsrcmgr, laparams=laparams) 46 # 創(chuàng)建一個(gè)PDF解釋器對(duì)象 47 interpreter = PDFPageInterpreter(rsrcmgr, device) 48 49 # 用來(lái)計(jì)數(shù)頁(yè)面,圖片,曲線,figure,水平文本框等對(duì)象的數(shù)量 50 num_page, num_image, num_curve, num_figure, num_TextBoxHorizontal = 0, 0, 0, 0, 0 51 52 # 循環(huán)遍歷列表,每次處理一個(gè)page的內(nèi)容 53 for page in doc.get_pages(): # doc.get_pages() 獲取page列表 54 num_page += 1 # 頁(yè)面增一 55 interpreter.process_page(page) 56 # 接受該頁(yè)面的LTPage對(duì)象 57 layout = device.get_result() 58 for x in layout: 59 if isinstance(x,LTImage): # 圖片對(duì)象 60 num_image += 1 61 if isinstance(x,LTCurve): # 曲線對(duì)象 62 num_curve += 1 63 if isinstance(x,LTFigure): # figure對(duì)象 64 num_figure += 1 65 if isinstance(x, LTTextBoxHorizontal): # 獲取文本內(nèi)容 66 num_TextBoxHorizontal += 1 # 水平文本框?qū)ο笤鲆?/div> 67 # 保存文本內(nèi)容 68 with open(r'test2.doc', 'a',encoding='utf-8') as f: #生成doc文件的文件名及路徑 69 results = x.get_text() 70 f.write(results) 71 f.write('\n') 72 print('對(duì)象數(shù)量:\n','頁(yè)面數(shù):%s\n'%num_page,'圖片數(shù):%s\n'%num_image,'曲線數(shù):%s\n'%num_curve,'水平文本框:%s\n' 73 %num_TextBoxHorizontal) 74 75 76if __name__ == '__main__': 77 pdf_path = r'diya.pdf' #pdf文件路徑及文件名 78 parse(pdf_path)
|
|