目錄
- 一、圖示
- 二、前期準(zhǔn)備
- 三、pdf轉(zhuǎn)word
- 四、GUI設(shè)計(jì)
- 五、打包代碼
一、圖示
上面為pdf截圖內(nèi)容,下面為轉(zhuǎn)化后的word截圖內(nèi)容
接下來(lái),我們?cè)囋囎约簞?dòng)作寫這個(gè)工具吧!
二、前期準(zhǔn)備
由于我們采用的是python
進(jìn)行工具編寫,并最終需要打包成一個(gè)exe
文件供我們使用。為了降低包體大小,我們需要先創(chuàng)建一個(gè)虛擬環(huán)境
備用。
另外,pdf轉(zhuǎn)word有現(xiàn)成的第三方庫(kù)pdf2docx
,同時(shí)關(guān)于gui我們用的是pysimplegui
,打包成exe采用的是pyinstaller
。在創(chuàng)建虛擬環(huán)境后,我們將這些需要用到的第三方庫(kù)也一一安裝吧。
# 創(chuàng)建虛擬環(huán)境
conda create -n env_pdf python=3.8.8
# 激活虛擬環(huán)境
conda activate env_pdf
# 安裝三個(gè)庫(kù)
pip install pdf2docx
pip install pysimplegui
pip install pyinstaller
關(guān)于這三個(gè)庫(kù),大家可以查閱官方文檔了解更多:
pdf2word : https://dothinking.github.io/pdf2docx/index.html
pysimplegui:https://pysimplegui.readthedocs.io/en/latest/
pyinstaller:http://www.pyinstaller.org/
前期準(zhǔn)備工具就緒,我們開(kāi)始進(jìn)入工具編寫階段。
三、pdf轉(zhuǎn)word
pdf轉(zhuǎn)word感覺(jué)是一個(gè)存在已久的話題,現(xiàn)在其實(shí)市面上很多工具可以使用,不過(guò)完全免費(fèi)的可能需要認(rèn)真找找。
我們知道python有很多處理pdf文檔的第三方庫(kù)以及處理word的第三方庫(kù),所以有人就將這兩類庫(kù)的功能進(jìn)行了整合,從而有了今天的主角pdf2docx
。
基本思路:
- 利用
PyMuPDF
獲取頁(yè)面元素,例如文本和形狀及其位置
- 再利用元素間的相對(duì)位置關(guān)系推斷內(nèi)容
- 最后使用
python-docx
將上一步解析的內(nèi)容元素重建為docx格式的Word文檔
基于以上情況,咱們這個(gè)工具在進(jìn)行操作的時(shí)候會(huì)存在以下不足:
- 無(wú)法識(shí)別和重建PDF掃描件
- 根據(jù)有限的、確定的規(guī)則建立PDF與docx元素之間的映射并非完全可靠,也就是說(shuō)僅能處理常見(jiàn)的規(guī)范的格式,而非百分百還原
當(dāng)然,以上這些我們都不用管,直接參考官方給到的代碼即可:
from pdf2docx import Converter
import re
# 傳入文件絕對(duì)路徑
def pdf_to_word(fileName):
pdf_file = fileName
# 正則獲取不含文件類型后綴的部分,用于組成word文檔絕對(duì)路徑
name = re.findall(r'(.*?)\.',pdf_file)[0]
docx_file = f'{name}.docx'
cv = Converter(pdf_file)
cv.convert(docx_file, start=0, end=None)
cv.close()
其中,start
和end
參數(shù)指定待轉(zhuǎn)換pdf文檔的頁(yè)碼范圍(默認(rèn)是從0開(kāi)始到最后一頁(yè));也可以通過(guò)pages
指定不連續(xù)的頁(yè)面,例如pages=[1,3,5]
。
四、GUI設(shè)計(jì)
關(guān)于pdf轉(zhuǎn)word的功能,我們需要的就是選擇待轉(zhuǎn)化的文件、開(kāi)始轉(zhuǎn)化即可,另外記錄一下操作流讓我們知道進(jìn)度就完美了。所以,功能其實(shí)很簡(jiǎn)單,我們基于以上功能設(shè)計(jì)簡(jiǎn)單的GUI如下:
ue設(shè)計(jì)手稿
由于我們這次用到的是pysimplegui
這個(gè)超級(jí)簡(jiǎn)單好用的工具庫(kù),那么為了滿足以上功能,編碼如下(思路見(jiàn)注釋)。
import PySimpleGUI as sg
import re
# 主題設(shè)置
sg.theme('DarkTeal7')
# 布局設(shè)置
layout = [
[sg.Text('待轉(zhuǎn)化的文件是:',font=("微軟雅黑", 12)),sg.Text('',key='filename',size=(50,1),font=("微軟雅黑", 10),text_color='blue')],
[sg.Text('程序操作記錄',justification='center')],
[sg.Output(size=(80, 20),font=("微軟雅黑", 10))],
[sg.FileBrowse('選擇文件',key='file',target='filename'),sg.Button('開(kāi)始轉(zhuǎn)化'),sg.Button('關(guān)閉程序')]
]
# 創(chuàng)建窗口
window = sg.Window('pdf轉(zhuǎn)word工具,作者@微信公眾號(hào):可以叫我才哥', layout,font=("微軟雅黑", 15),default_element_size=(50,1))
# 事件循環(huán)
while True:
event, values = window.read()
if event in (None, '關(guān)閉程序'):
break
if event == '開(kāi)始轉(zhuǎn)化':
if values['file'] and re.findall(r'\.(\S+)',values['file'])[0]=='pdf':
fileName = values['file']
pdf_to_word(fileName)
print('\n----------轉(zhuǎn)化完畢----------\n')
else:
print('文件未選取或文件非pdf文件\n請(qǐng)先選擇文件')
window.close()
不得不說(shuō),確實(shí)會(huì)比PyQt5
要來(lái)的簡(jiǎn)單。
sg.theme('DarkTeal7')
是設(shè)置gui的主題,pysimplegui提供很多主題,大家可以自由選擇;
layout
就是設(shè)置布局,具體我們根據(jù)UE手稿需求從上到下依次設(shè)置:
sg.Text()
設(shè)置文本內(nèi)容和格式
sg.Output()
設(shè)置print輸出的地方
sg.FileBrowse()
設(shè)置文件選擇瀏覽器,key
是指定健名稱,target
是選定的文件夾名
sg.Button()
設(shè)置按鈕
sg.Window()
是創(chuàng)建窗口,可以帶窗口名稱等信息
event
和values
是當(dāng)執(zhí)行window.read()
函數(shù)時(shí)的返回值:其中event
是事件,如點(diǎn)擊按鈕、選擇文件等;values
是包含輸入的值,比如我們選擇文件后的文件名信息值。
結(jié)合之前的pdf轉(zhuǎn)word函數(shù),這里的邏輯如下:
當(dāng)我們點(diǎn)擊開(kāi)始轉(zhuǎn)化按鈕,先判斷是否選擇了pdf文件,如果是則執(zhí)行轉(zhuǎn)化函數(shù),否則就提示文件未選擇或選擇的非pdf文件。
五、打包代碼
這里采用的是pyinstaller進(jìn)行程序代碼打包,操作指令如下:
pyinstaller -F -w pdf轉(zhuǎn)word小工具.py
部分參數(shù)含義:
-F 表示生成單個(gè)可執(zhí)行文件
-w 表示去掉控制臺(tái)窗口,這在GUI界面時(shí)非常有用
-p 表示你自己自定義需要加載的類路徑,一般情況下用不到
-i 表示可執(zhí)行文件的圖標(biāo)
其實(shí),最新版本的word(office2019)已經(jīng)天然支持對(duì)非掃描版pdf的讀取和轉(zhuǎn)化了,大家通過(guò)以下流程進(jìn)行處理:文檔—>打開(kāi)—>選擇待轉(zhuǎn)化pdf文件
即可。
office-word自帶轉(zhuǎn)化功能
到此這篇關(guān)于只用40行Python代碼就能寫出pdf轉(zhuǎn)word小工具的文章就介紹到這了,更多相關(guān)pdf轉(zhuǎn)word小工具內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- 使用Python 統(tǒng)計(jì)文件夾內(nèi)所有pdf頁(yè)數(shù)的小工具
- 20行Python代碼實(shí)現(xiàn)一款永久免費(fèi)PDF編輯工具的實(shí)現(xiàn)
- 用python 制作圖片轉(zhuǎn)pdf工具
- Python開(kāi)發(fā)的單詞頻率統(tǒng)計(jì)工具wordsworth使用方法
- Python快速優(yōu)雅的批量修改Word文檔樣式
- python提取word文件中的所有圖片
- 教你如何利用Python批量翻譯英文Word文檔并保留格式
- 詳解用Python把PDF轉(zhuǎn)為Word方法總結(jié)
- 使用python處理一萬(wàn)份word表格簡(jiǎn)歷操作
- python 三種方法提取pdf中的圖片