1. 程式人生 > 程式設計 >Python 實現加密過的PDF檔案轉WORD格式

Python 實現加密過的PDF檔案轉WORD格式

實現方法簡介

許多檔案都支援轉換為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格式,希望對大家有所幫助!