Python 實現加密過的PDF檔案轉WORD格式
阿新 • • 發佈:2020-02-05
實現方法簡介
許多檔案都支援轉換為PDF格式,諸如Word,Excel,PowerPoint,Cad以及圖片格式。所以pdf從學校到職場,都可以看到pdf檔案的身影。
為了保證了檔案的安全性,正常情況下無法對pdf的內容進行編輯。但是相應的我們就無法修改pdf的內容,也不便於pdf資料的使用。雖然現在市面上有很多 pdf 轉 word 軟體,比如 wps,但大多數的軟體是要收費的,並且價格不菲。前些天就有人叫我幫她把 pdf 文件轉成 word 的文件。因為寫盡調報告需要去檢視各種信評資料,往往這些資料都是pdf格式的檔案,而且經常出現加密文件,為了方便查詢和複製相關資料,將加密過的pdf檔案轉換成word文件就會便捷不少,提高使用效率。
於是想到寫個程式,把 pdf 轉成 word 文件。秉承著不要重複造輪子的想法,我首先在網上搜索了下相關程式碼。大多是針對未加密過的pdf檔案來實現,本文結合加密文件的特殊性寫了相關程式來實現這個功能。
支援加密檔案的格式轉換
程式碼效果
環境配置
1、pdfminer安裝庫命令:
pip install pdfminer3k
2、docx安裝庫命令:
pip install python_docx
注:pdf中非圖片構成的部分才能被成功轉換:
#-*- coding: UTF-8 -*- #!/usr/bin/python #-*- coding: utf-8 -*- 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 import os #設定工作目錄資料夾 os.chdir(r'c:/users/dicey/desktop/codes/pdf-docx') #解析pdf檔案函式 def parse(pdf_path): fp = open('diya.pdf','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 # 迴圈遍歷列表,每次處理一個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'test2.doc','a',encoding='utf-8') as f: #生成doc檔案的檔名及路徑 results = x.get_text() f.write(results) f.write('\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'diya.pdf' #pdf檔案路徑及檔名 parse(pdf_path)
提供初始化密碼
如果沒有密碼 就建立一個空的字串
doc.initialize()
如果有密碼 就寫入相應的密碼
未知加密方式的pdf檔案
如果pdf檔案的加密方式不知道,影響檔案的複製和列印等可以先利用chrome瀏覽器來取消加密邏輯
實現方式很簡單,只需要將加密的檔案拖入到chrome瀏覽器再選擇列印另存為就可以,破除加密後再使用程式轉換檔案格式
總結
以上所述是小編給大家介紹的Python 實現加密過的PDF檔案轉WORD格式,希望對大家有所幫助!