python 實用程序 | PDF 轉 Word

閱讀文本大概須要 6 分鐘。python

如今網上有不少文檔是 pdf 格式,雖然這個格式閱讀起來很方便,而且裏面的內容不會亂掉,但相應的咱們就沒法修改裏面的內容。雖然如今市面上有不少 pdf 轉 word 軟件,好比 wps,但大多數的軟件是要收費的,而且價格不菲。git

前些天就有人叫我幫她把 pdf 文檔轉成 word 的文檔。由於 pdf 文檔裏面的內容有不少,若是所有打印的話,費用仍是挺高的。因此她想把裏面的內容格式修改下,好比行間距,字間距等等。經過這樣的修改,能夠把文檔的頁數減小不少,這樣就省下很多的錢。github

因而乎我就想到了利用 python 來寫個程序,把 pdf 轉成 word 文檔。秉承着不要重複造輪子的想法,我首先在網上搜索了下。果真已經有人寫好了,咱們直接拿來用就行。程序一共只有 60 行代碼,使用也很是的簡單,app

程序源代碼ui

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()

使用方法

首先去 github 上把項目 clone 或下載項目到本地.spa

github : https://github.com/python-fan...code

git clone git@github.com:simpleapples/pdf2word.git

而後進入項目目錄,創建虛擬環境,並安裝依賴。教程

pip install -r requirements.txt

最後修改 config.cfg 文件,指定存放 pdf 和 word 文件的文件夾,以及同時工做的進程數,就能夠執行 python main.py。進程

具體的程序邏輯,能夠去查看原文。做者都分析的很詳細。ip

https://zhuanlan.zhihu.com/p/...

本文首發於公衆號「癡海」,天天分享 Python 乾貨,後臺回覆「1024」,領取 2018 最新 Python 教程。

相關文章
相關標籤/搜索