兩行Python代碼實現pdf轉word功能

一、安裝依賴包

pip install --index https://pypi.mirrors.ustc.edu.cn/simple/ python-office

二、pdf轉word

2.1 代碼實現

import office
office.pdf.pdf2docx(file_path = 'test.pdf')

運行過程如下:

[1/4] Opening document…
[INFO] [2/4] Analyzing document…
[WARNING] 'created' timestamp seems very low; regarding as unix timestamp
[WARNING] 'modified' timestamp seems very low; regarding as unix timestamp
[WARNING] 'created' timestamp seems very low; regarding as unix timestamp
[WARNING] 'modified' timestamp seems very low; regarding as unix timestamp
[INFO] [3/4] Parsing pages…
[INFO] (1/9) Page 1
[INFO] (2/9) Page 2
[INFO] (3/9) Page 3
[INFO] (4/9) Page 4
[INFO] (5/9) Page 5
[INFO] (6/9) Page 6
[INFO] (7/9) Page 7
[INFO] (8/9) Page 8
[INFO] (9/9) Page 9
[INFO] [4/4] Creating pages…
[INFO] (1/9) Page 1
[INFO] (2/9) Page 2
[INFO] (3/9) Page 3
[INFO] (4/9) Page 4
[INFO] (5/9) Page 5
[INFO] (6/9) Page 6
[INFO] (7/9) Page 7
[INFO] (8/9) Page 8
[INFO] (9/9) Page 9
[INFO] Terminated in 1.30s.
 
Process finished with exit code 0

2.2 pdf內容

2.3 轉換後的word

由上可見,效果還不錯。

補充

除瞭上文的辦法,小編還為大傢整理瞭更多Python實現的PDF轉Word方法,需要的可以參考一下

方法一:

import os
from configparser import ConfigParser
from io import StringIO
from io import open
from concurrent.futures import ProcessPoolExecutor

from pdfminer.pdfinterp import PDFResourceManager
from pdfminer.pdfinterp import process_pdf
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from docx import Document


def read_from_pdf(file_path):
    with open(file_path, 'rb') as file:
        resource_manager = PDFResourceManager()
        return_str = StringIO()
        lap_params = LAParams()

        device = TextConverter(
            resource_manager, return_str, laparams=lap_params)
        process_pdf(resource_manager, device, file)
        device.close()

        content = return_str.getvalue()
        return_str.close()
        return content


def save_text_to_word(content, file_path):
    doc = Document()
    for line in content.split('\n'):
        paragraph = doc.add_paragraph()
        paragraph.add_run(remove_control_characters(line))
    doc.save(file_path)


def remove_control_characters(content):
    mpa = dict.fromkeys(range(32))
    return content.translate(mpa)


def pdf_to_word(pdf_file_path, word_file_path):
    content = read_from_pdf(pdf_file_path)
    save_text_to_word(content, word_file_path)


def main():
    config_parser = ConfigParser()
    config_parser.read('config.cfg')
    config = config_parser['default']

    tasks = []
    with ProcessPoolExecutor(max_workers=int(config['max_worker'])) as executor:
        for file in os.listdir(config['pdf_folder']):
            extension_name = os.path.splitext(file)[1]
            if extension_name != '.pdf':
                continue
            file_name = os.path.splitext(file)[0]
            pdf_file = config['pdf_folder'] + '/' + file
            word_file = config['word_folder'] + '/' + file_name + '.docx'
            print('正在處理: ', file)
            result = executor.submit(pdf_to_word, pdf_file, word_file)
            tasks.append(result)
    while True:
        exit_flag = True
        for task in tasks:
            if not task.done():
                exit_flag = False
        if exit_flag:
            print('完成')
            exit(0)


if __name__ == '__main__':
    main()

方法二:

加密過的PDF轉word

#-*- 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, 0, 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)

到此這篇關於兩行Python代碼實現pdf轉word功能的文章就介紹到這瞭,更多相關Python實現pdf轉word內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: