驚呆同事的自動化小工具來了!Python 批量將 PDF 轉(zhuǎn) Word
作者:Cherish
來源:https://www.jianshu.com/p/4837343451fe
公眾號后臺回復(fù):「Python批量將pdf轉(zhuǎn)word」,即可獲取本文完整數(shù)據(jù)。
本文為讀者投稿
無論在工作還是學(xué)習(xí)中,大家都會遇到一個問題 "將 PDF 中的內(nèi)容(文本和圖片)轉(zhuǎn)換為 Word 的格式" ,也可以說從只讀轉(zhuǎn)換成可編輯的格式。當(dāng)然網(wǎng)上有很多工具可以實現(xiàn),但大多數(shù)都是收費的。
那今天的分享就是通過利用 Python 實現(xiàn)批量將 PDF 轉(zhuǎn)換成 Word 并做成一個桌面小工具。
好處一方面是 Python 有免費的開源庫可供我們使用;另一方面可以根據(jù)我們需求靈活定制功能,最后工具可以重復(fù)使用,即使你的同事電腦沒有 Python 開發(fā)環(huán)境,也可以輕松使用。
一、實現(xiàn)效果


二、環(huán)境準(zhǔn)備
2.1 pdf 轉(zhuǎn) word
實現(xiàn)這個功能,主要使用的是 pdf2docx 這個庫,也是最推薦的。
只要是標(biāo)準(zhǔn) PDF 文檔,里面的圖片和表格都可以保留格式,要注意的是 Python 版本必須是 3.6 或以上,本文使用的是 Python 3.8。安裝命令如下:
pip install pdf2docx

2.2 繪制圖形用戶界面
Python 有許多 GUI 工具包可供選擇,本文使用 PySimpleGUI,使用起來比較簡單,對于我們這個需求足夠用。更多可參考:PySimpleGUI 文檔[1],有非常多的示例,本文不做過多拓展。使用之前也需要安裝一下,注意大小寫。
pip install PySimpleGUI
2.3 py 程序打包 exe
pyinstaller 是一個非常簡單的打包 Python 的 py 文件的庫,一條命令即可實現(xiàn)打包。更多可參考官方文檔:pyinstaller[2]
pip install pyinstaller
三、代碼實現(xiàn)
3.1 PDF 轉(zhuǎn) Word 函數(shù)
from pdf2docx import Converter
import PySimpleGUI as sg
def pdf2word(file_path):
file_name = file_path.split('.')[0]
doc_file = f'{file_name}.docx'
p2w = Converter(file_path)
p2w.convert(doc_file, start=0, end=None)
p2w.close()
return doc_file
3.2 設(shè)計圖形用戶界面
def main():
# 選擇主題
sg.theme('LightBlue5')
# 設(shè)置窗口
layout = [
[sg.Text('pdfToword', font=('微軟雅黑', 12)),
sg.Text('', key='filename', size=(50, 1), font=('微軟雅黑', 10), text_color='blue')],
[sg.Output(size=(80, 10), font=('微軟雅黑', 10))],
[sg.FilesBrowse('選擇文件', key='file', target='filename'), sg.Button('開始轉(zhuǎn)換'), sg.Button('退出')]]
# 創(chuàng)建窗口
window = sg.Window("Python與數(shù)據(jù)分析_青青", layout, font=("微軟雅黑", 15), default_element_size=(50, 1))
3.3 實現(xiàn)單個文件和批量文件操作
# 事件循環(huán)
while True:
# 窗口的讀取,有兩個返回值(1.事件;2.值)
event, values = window.read()
print(event, values)
if event == "開始轉(zhuǎn)換":
# 單個文件
if values['file'] and values['file'].split('.')[1] == 'pdf':
filename = pdf2word(values['file'])
print('文件個數(shù) :1')
print('\n' + '轉(zhuǎn)換成功!' + '\n')
print('文件保存位置:', filename)
# 多個文件
elif values['file'] and values['file'].split(';')[0].split('.')[1] == 'pdf':
print('文件個數(shù) :{}'.format(len(values['file'].split(';'))))
for f in values['file'].split(';'):
filename = pdf2word(f)
print('\n' + '轉(zhuǎn)換成功!' + '\n')
print('文件保存位置:', filename)
else:
print('請選擇pdf格式的文件哦!')
if event in (None, '退出'):
break
window.close()
3.4 調(diào)用主要功能函數(shù)
main()
四、打包代碼
打開 DOS 窗口并切換到 demo.py(這里我新建了文件夾,放到了D盤)文件所在的目錄,注意路徑中不要有中文:

pyinstaller 指令的常見可選參數(shù):
-i 給應(yīng)用程序添加圖標(biāo)
-F 指定打包后只生成一個exe格式的文件
-D –onedir 創(chuàng)建一個目錄,包含exe文件,但會依賴很多文件(默認(rèn)選項)
-c –console, –nowindowed 使用控制臺,無界面(默認(rèn))
-w –windowed, –noconsole 使用窗口,無控制臺
-p 添加搜索路徑

在當(dāng)前的目錄下,將會生成兩個文件夾:build 和 dist。
dist 文件夾里就是所有可執(zhí)行的 exe 文件,發(fā)送快捷方式到桌面,點擊 exe 即可運行。

五、解決 exe 文件過大問題【可略】
如果生成 exe 之后,若發(fā)現(xiàn)程序異常的慢,可檢查導(dǎo)包代碼,盡量不要出現(xiàn)以下寫法,否則每次啟動程序,都會導(dǎo)入大量函數(shù)占用大量時間。
from ··· import *
改成 import 包名
搭建干凈的 Python 虛擬環(huán)境可參考:太強了!Python 開發(fā)桌面小工具,讓代碼替我們干重復(fù)的工作!里面介紹了什么是虛擬環(huán)境,以及如何搭建。
好了,到這里本期分享的內(nèi)容就結(jié)束了,其主要目的是為大家提高工作效率,為辦公自動化提供一種思路。歡迎大家在評論區(qū)與我們一起交流討論。
擴展鏈接
[1] PySimpleGUI 文檔 https://github.com/PySimpleGUI/PySimpleGUI
[2] pyinstaller
https://pyinstaller.readthedocs.io/en/latest/usage.html
公眾號后臺回復(fù):「Python批量將pdf轉(zhuǎn)word」,即可獲取本文完整數(shù)據(jù)。
推薦閱讀
建議收藏!Python 讀取千萬級數(shù)據(jù)自動寫入 MySQL 數(shù)據(jù)庫
用 Python 批量提取 PDF 的圖片,并存儲到指定文件夾
用 Python 批量提取 PDF 的表格數(shù)據(jù),保存為 Excel
太強了!Python 開發(fā)桌面小工具,讓代碼替我們干重復(fù)的工作!
太酷了!手把手教你用 Python 繪制桑基圖!| 用戶行為路徑分析
MySQL 高級 | 用存儲過程、定時器、觸發(fā)器來解決數(shù)據(jù)分析問題

