Python 操作 Word 轉換 PDF
在工作中 Word 文檔通常不是最終版本,在發給甲方或者其他同事時,我們還需要把Word文檔轉換為PDF格式文件。那為什么需要轉換 PDF,直接發 Word 文檔又有什么問題?
其實直接發 Word 文檔問題還是挺大的,可以大致總結以下幾點:
- 由于每個人使用的軟件或版本都不統一,可能你使用的是微軟的 Office2007,而他使用的是金山WPS,這樣有可能你本地樣式已經好好的 Word 文檔,在別人電腦上就出現了亂碼;
- PDF 可以直接預覽,目前主流瀏覽器都已經支持;
- PDF 文件無法修改,保證了信息安全。
了解了轉換 PDF 格式文件的作用之后,接下來這一小節中,將介紹 Python 第三方模塊 pywin32 實現Word 文檔轉換為 PDF 格式文件。
1. pywin32 模塊介紹
在 Windows 上如需使用 Python 編寫腳本,很多時候都需要用到 Windows API,但 Python 是沒有自帶訪問 Windows 系統 API 的標準庫,所以這時可以使用第三方庫 pywin32 來解決,pywin32 模塊中直接包裝了幾乎所有的 Windows API,讓開發者可以很方便的調用。
使用 python win32 庫實現 Word 轉換 PDF,實際上是調用 Word 底層 vba,利用 Word 導出方法完成 PDF 轉換,文檔地址:
1.1 安裝
pywin32 是 Python 的第三方庫,使用前需要通過以下命令進行安裝:
pip install pywin32
1.2 使用步驟
步驟1:導入 pywin32 下所需模塊
from win32com.client import constants,gencache
步驟2:啟動一個新的 Word 進程
word=gencache.EnsureDispatch('Word.Application')
步驟3:讀取要轉換的 Word 文檔
doc=word.Documents.Open(wordPath,ReadOnly=1)
步驟4:轉換 PDF 格式文件
doc.ExportAsFixedFormat(pdfPath,constants.wdExportFormatPDF)
ExportAsFixedFormat() 方法可以將文檔保存為 PDF 或 XPS 格式,第一個參數指定新的 PDF 或 XPS 文件的路徑和文件名,第二個參數是一個枚舉值(取值包括:wdExportFormatPDF 和 wdExportFormatXPS)用于指定轉換的格式,上述代碼中要將文檔轉換為 PDF 在設置時設置為constants.wdExportFormatPDF。
2. Word 文檔轉換 PDF
接下來,通過 pywin32 模塊分別實現單個 Word 文檔的轉換和多個Word 文檔的轉換。
2.1 單個文件轉換
根據pywin32模塊的使用步驟,封裝轉換方法 createpdf 方法,代碼如下:
def createpdf(wordPath,pdfPath):
word=gencache.EnsureDispatch('Word.Application')
doc=word.Documents.Open(wordPath,ReadOnly=1)
#轉換方法
doc.ExportAsFixedFormat(pdfPath,constants.wdExportFormatPDF)
代碼解釋:EnsureDispatch() 方法為啟動一個新的 Word 進程,通過啟動的 Word 進程讀取傳入指定的Word 文檔,打開 Word 文檔后,通過 ExportAsFixedFormat() 方法進行導出 PDF,第一個參數為指定的PDF 文件存儲路徑,第二個參數為指定導出文件的類型,除 PDF 外,還可以傳入 XPS 格式。執行完成后,生成了 “info.pdf” 格式文件,效果如下圖所示:
2.2 多個文件轉換
完成單個 Word 文檔轉換之后,日常工作中有時會涉及到批量 Word文 檔的轉換,這時可以在單個Word 文檔轉換代碼的基礎上進行完善,修改后代碼如下:
from win32com.client import constants,gencache
import os
def createpdf(wordPath,pdfPath):
word=gencache.EnsureDispatch('Word.Application')
doc=word.Documents.Open(wordPath,ReadOnly=1)
#轉換方法
doc.ExportAsFixedFormat(pdfPath,constants.wdExportFormatPDF)
#多個文件的轉換
print(os.listdir('.')) #當前文件夾下的所有文件
wordfiles=[]
for file in os.listdir('.'):
if file.endswith(('.doc','.docx')):
wordfiles.append(file)
for file in wordfiles:
filepath=os.path.abspath(file)
index=filepath.rindex('.')
# 拼接文件名及.pdf后綴
pdfpath=filepath[:index]+'.pdf'
createpdf(filepath,pdfpath)
代碼解釋:通過 Python 中內置的os模塊,讀取指定目錄獲取所有的 Word 文檔,保存在wordfiles中。通過for…in循環wordfiles,在循環中,首先根據abspath()方法得到文檔的絕對路徑,將文檔名稱拼接.pdf作為PDF文件的新名稱。調用封裝好的createpdf() 方法將文檔路徑和PDF文件路徑傳入,進行文件轉換。執行完成后,在指定目錄就批量生成 PDF 格式文件。
3. pywin32 模塊拓展
前面提到pywin32 模塊中直接包裝了幾乎所有的 Windows API,除了前面小節介紹的轉換PDF外,還可以進行如下操作,一起來體驗下吧!
3.1 彈出MessageBox消息框
使用pywin32實現系統消息框的彈出,代碼如下:
import win32api
import win32con
win32api.MessageBox(0, "Hello Python", "消息框標題", win32con.MB_OK)
代碼解釋:MessageBox() 方法彈出消息框,第一個參數標識要創建的消息框的所有者窗口,第二個參數指向要顯示的消息,第三個參數表示對話框標題,第四個參數指定一組位標志來確定對話框的內容和行為,取值范圍如下:
- MB_ABORTRETRYIGNORE:消息框包含三個按鈕:中止,重試和忽略;
- MB_OK:消息框包含一個按鈕:OK。這是默認值;
- MB_OKCANCEL:消息框包含兩個按鈕:確定和取消;
- MB_RETRYCANCEL:消息框包含兩個按鈕:重試和取消;
- MB_YESNO:消息框包含兩個按鈕:是和否;
- MB_YESNOCANCEL:消息框包含三個按鈕:是,否和取消。
執行完成后,彈出消息框效果如下圖所示:
3.2 模擬鍵盤操作
使用 pywin32 模擬按下鍵盤的回車鍵(Enter),代碼如下:
import win32api,win32con
win32api.keybd_event(13,0,win32con.KEYEVENTF_EXTENDEDKEY)
代碼解釋:keybd_event() 方法為觸發鍵盤事件,第一個參數為虛擬鍵碼(13表示回車鍵),第二個參數為硬件掃描碼,一般設置為0即可,第三個參數表示操作的標志位,如果值為KEYEVENTF_EXTENDEDKEY則該鍵被按下,值為KEYEVENTF_KEYUP則該按鍵被釋放。
4. 小結
本節課程我們主要學習了 pywin32 模塊的使用。本節課程的重點如下:
- 了解pywin32模塊作用及使用步驟;
- 掌握 pywin32模塊實現Word文檔轉換PDF格式文件的方法;
Tips:想要學習更多Pandas相關知識,可以點擊
Python 操作 Excel 數據表:數據讀取
Python 操作 Excle 數據表:數據寫入
Python 操作 Word 寫入