只用40行Python代碼就能寫出pdf轉word小工具
一、圖示
上面為pdf截圖內容,下面為轉化后的word截圖內容
接下來,我們試試自己動作寫這個工具吧!
二、前期準備
由于我們采用的是python
進行工具編寫,并最終需要打包成一個exe
文件供我們使用。為了降低包體大小,我們需要先創(chuàng)建一個虛擬環(huán)境
備用。
另外,pdf轉word有現(xiàn)成的第三方庫pdf2docx
,同時關于gui我們用的是pysimplegui
,打包成exe采用的是pyinstaller
。在創(chuàng)建虛擬環(huán)境后,我們將這些需要用到的第三方庫也一一安裝吧。
# 創(chuàng)建虛擬環(huán)境 conda create -n env_pdf python=3.8.8 # 激活虛擬環(huán)境 conda activate env_pdf # 安裝三個庫 pip install pdf2docx pip install pysimplegui pip install pyinstaller
關于這三個庫,大家可以查閱官方文檔了解更多:
pdf2word : https://dothinking.github.io/pdf2docx/index.html
pysimplegui:https://pysimplegui.readthedocs.io/en/latest/
pyinstaller:http://www.pyinstaller.org/
前期準備工具就緒,我們開始進入工具編寫階段。
三、pdf轉word
pdf轉word感覺是一個存在已久的話題,現(xiàn)在其實市面上很多工具可以使用,不過完全免費的可能需要認真找找。
我們知道python有很多處理pdf文檔的第三方庫以及處理word的第三方庫,所以有人就將這兩類庫的功能進行了整合,從而有了今天的主角pdf2docx
。
基本思路:
- 利用
PyMuPDF
獲取頁面元素,例如文本和形狀及其位置 - 再利用元素間的相對位置關系推斷內容
- 最后使用
python-docx
將上一步解析的內容元素重建為docx格式的Word文檔
基于以上情況,咱們這個工具在進行操作的時候會存在以下不足:
- 無法識別和重建PDF掃描件
- 根據(jù)有限的、確定的規(guī)則建立PDF與docx元素之間的映射并非完全可靠,也就是說僅能處理常見的規(guī)范的格式,而非百分百還原
當然,以上這些我們都不用管,直接參考官方給到的代碼即可:
from pdf2docx import Converter import re # 傳入文件絕對路徑 def pdf_to_word(fileName): pdf_file = fileName # 正則獲取不含文件類型后綴的部分,用于組成word文檔絕對路徑 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ù)指定待轉換pdf文檔的頁碼范圍(默認是從0開始到最后一頁);也可以通過pages
指定不連續(xù)的頁面,例如pages=[1,3,5]
。
四、GUI設計
關于pdf轉word的功能,我們需要的就是選擇待轉化的文件、開始轉化即可,另外記錄一下操作流讓我們知道進度就完美了。所以,功能其實很簡單,我們基于以上功能設計簡單的GUI如下:
ue設計手稿
由于我們這次用到的是pysimplegui
這個超級簡單好用的工具庫,那么為了滿足以上功能,編碼如下(思路見注釋)。
import PySimpleGUI as sg import re # 主題設置 sg.theme('DarkTeal7') # 布局設置 layout = [ [sg.Text('待轉化的文件是:',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('開始轉化'),sg.Button('關閉程序')] ] # 創(chuàng)建窗口 window = sg.Window('pdf轉word工具,作者@微信公眾號:可以叫我才哥', layout,font=("微軟雅黑", 15),default_element_size=(50,1)) # 事件循環(huán) while True: event, values = window.read() if event in (None, '關閉程序'): break if event == '開始轉化': if values['file'] and re.findall(r'\.(\S+)',values['file'])[0]=='pdf': fileName = values['file'] pdf_to_word(fileName) print('\n----------轉化完畢----------\n') else: print('文件未選取或文件非pdf文件\n請先選擇文件') window.close()
不得不說,確實會比PyQt5
要來的簡單。
sg.theme('DarkTeal7')
是設置gui的主題,pysimplegui提供很多主題,大家可以自由選擇;
layout
就是設置布局,具體我們根據(jù)UE手稿需求從上到下依次設置:
sg.Text()
設置文本內容和格式sg.Output()
設置print輸出的地方sg.FileBrowse()
設置文件選擇瀏覽器,key
是指定健名稱,target
是選定的文件夾名sg.Button()
設置按鈕sg.Window()
是創(chuàng)建窗口,可以帶窗口名稱等信息
event
和values
是當執(zhí)行window.read()
函數(shù)時的返回值:其中event
是事件,如點擊按鈕、選擇文件等;values
是包含輸入的值,比如我們選擇文件后的文件名信息值。
結合之前的pdf轉word函數(shù),這里的邏輯如下:
當我們點擊開始轉化按鈕,先判斷是否選擇了pdf文件,如果是則執(zhí)行轉化函數(shù),否則就提示文件未選擇或選擇的非pdf文件。
五、打包代碼
這里采用的是pyinstaller進行程序代碼打包,操作指令如下:
pyinstaller -F -w pdf轉word小工具.py
部分參數(shù)含義:
-F 表示生成單個可執(zhí)行文件
-w 表示去掉控制臺窗口,這在GUI界面時非常有用
-p 表示你自己自定義需要加載的類路徑,一般情況下用不到
-i 表示可執(zhí)行文件的圖標
其實,最新版本的word(office2019)已經(jīng)天然支持對非掃描版pdf的讀取和轉化了,大家通過以下流程進行處理:文檔—>打開—>選擇待轉化pdf文件
即可。
office-word自帶轉化功能
到此這篇關于只用40行Python代碼就能寫出pdf轉word小工具的文章就介紹到這了,更多相關pdf轉word小工具內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python實現(xiàn)檢測文件的MD5值來查找重復文件案例
這篇文章主要介紹了Python實現(xiàn)檢測文件的MD5值來查找重復文件案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03Pytorch上下采樣函數(shù)之F.interpolate數(shù)組采樣操作詳解
最近用到了上采樣下采樣操作,pytorch中使用interpolate可以很輕松的完成,下面這篇文章主要給大家介紹了關于Pytorch上下采樣函數(shù)之F.interpolate數(shù)組采樣操作的相關資料,需要的朋友可以參考下2022-04-04Python批量添加水印的優(yōu)雅實現(xiàn)與進階
在日常圖像處理中,為圖片添加水印是一項常見任務,有多種方法和工具可供選擇,本文將專注于使用Python語言結合PIL庫批量添加水印,感興趣的可以了解下2023-12-12python簡單實現(xiàn)整數(shù)反轉的畫解算法
這篇文章主要介紹了python簡單實現(xiàn)整數(shù)反轉采用了一個有趣的畫解算法,通過示例的題目描述來對問題分析進行方案的解決,有需要的朋友可以參考下2021-08-08