40行代码自己动手写pdf转word小工具(文末附工具下载)
公眾號:可以叫我才哥
大家好,我是啟航。
今天咱們介紹一個pdf轉word的免費小工具,滿足這么一個不常見但是偶爾會出來煩人的需求!
文末附工具及源碼下載方式
我們來先看看小工具操作流程吧!
40行代碼自己動手寫pdf轉word小工具(附工具下載)
對于轉化后的效果對比如下:
上面為pdf截圖內容,下面為轉化后的word截圖內容
pdf轉word
接下來,我們試試自己動作寫這個工具吧!
1. 前期準備
由于我們采用的是python進行工具編寫,并最終需要打包成一個exe文件供我們使用。為了降低包體大小,我們需要先創建一個虛擬環境備用。
另外,pdf轉word有現成的第三方庫pdf2docx,同時關于gui我們用的是pysimplegui,打包成exe采用的是pyinstaller。在創建虛擬環境后,我們將這些需要用到的第三方庫也一一安裝吧。
#?創建虛擬環境 conda?create?-n?env_pdf?python=3.8.8#?激活虛擬環境 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/
前期準備工具就緒,我們開始進入工具編寫階段。
2. pdf轉word
pdf轉word感覺是一個存在已久的話題,現在其實市面上很多工具可以使用,不過完全免費的可能需要認真找找。
我們知道python有很多處理pdf文檔的第三方庫以及處理word的第三方庫,所以有人就將這兩類庫的功能進行了整合,從而有了今天的主角pdf2docx。
基本思路:
-
利用PyMuPDF獲取頁面元素,例如文本和形狀及其位置
-
再利用元素間的相對位置關系推斷內容
-
最后使用python-docx將上一步解析的內容元素重建為docx格式的Word文檔
基于以上情況,咱們這個工具在進行操作的時候會存在以下不足:
-
無法識別和重建PDF掃描件
-
根據有限的、確定的規則建立PDF與docx元素之間的映射并非完全可靠,也就是說僅能處理常見的規范的格式,而非百分百還原
當然,以上這些我們都不用管,直接參考官方給到的代碼即可:
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參數指定待轉換pdf文檔的頁碼范圍(默認是從0開始到最后一頁);也可以通過pages指定不連續的頁面,例如pages=[1,3,5]。
3. 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('關閉程序')]]??????#?創建窗口 window?=?sg.Window('pdf轉word工具,作者@微信公眾號:可以叫我才哥',?layout,font=("微軟雅黑",?15),default_element_size=(50,1))????#?事件循環 while?True:event,?values?=?window.read()if?event?in?(None,?'關閉程序'):breakif?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就是設置布局,具體我們根據UE手稿需求從上到下依次設置:
-
sg.Text()設置文本內容和格式
-
sg.Output()設置print輸出的地方
-
sg.FileBrowse()設置文件選擇瀏覽器,key是指定健名稱,target是選定的文件夾名
-
sg.Button()設置按鈕
sg.Window()是創建窗口,可以帶窗口名稱等信息
event和values是當執行window.read()函數時的返回值:其中event是事件,如點擊按鈕、選擇文件等;values是包含輸入的值,比如我們選擇文件后的文件名信息值。
結合之前的pdf轉word函數,這里的邏輯如下:
當我們點擊開始轉化按鈕,先判斷是否選擇了pdf文件,如果是則執行轉化函數,否則就提示文件未選擇或選擇的非pdf文件。
4. 打包代碼
這里采用的是pyinstaller進行程序代碼打包,操作指令如下:
pyinstaller?-F?-w?pdf轉word小工具.py部分參數含義:
-F ? ?表示生成單個可執行文件?
-w ? 表示去掉控制臺窗口,這在GUI界面時非常有用?
-p ? ?表示你自己自定義需要加載的類路徑,一般情況下用不到?
-i ? ? 表示可執行文件的圖標
其實,最新版本的word(office2019)已經天然支持對非掃描版pdf的讀取和轉化了,大家通過以下流程進行處理:文檔—>打開—>選擇待轉化pdf文件即可。
office-word自帶轉化功能
以上就是本次全部內容,pysimplegui官網有很多案例代碼,大家可以試試,基本上稍微修改下就可以實現很多你想要做的工具功能, 非常值得去體驗!
點贊評論達到10個,咱們在評論區開放工具及源碼下載方式,謝謝支持啦
?文章到這里就結束了,感謝你的觀看
說實在的,每次在后臺看到一些讀者的回應都覺得很欣慰,我想把我收藏的一些編程干貨貢獻給大家,回饋每一個讀者,希望能幫到你們。
干貨主要有:
① 2000多本Python電子書(主流和經典的書籍應該都有了)
② Python標準庫資料(最全中文版)
③ 項目源碼(四五十個有趣且經典的練手項目及源碼)
④ Python基礎入門、爬蟲、web開發、大數據分析方面的視頻(適合小白學習)
⑤? ? Python所有知識點匯總(可以弄清楚Python的所有方向和技術)
*如果你用得到的話可以直接拿走,在我的QQ技術交流群里,可以自助拿走,群號是857113825。*
總結
以上是生活随笔為你收集整理的40行代码自己动手写pdf转word小工具(文末附工具下载)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java udp发送速率_项目总结22:
- 下一篇: [css] 有哪些标签是不支持伪元素的