批量Word轉(zhuǎn)PDF方法
手上有近百個(gè) Word 文檔需要轉(zhuǎn)為 PDF, 怎么辦?
難道要一個(gè)一個(gè)的導(dǎo)出嗎?
確實(shí),Office2010 以后版本的 Word 可以直接導(dǎo)出 PDF,是時(shí)候讓 Python 來(lái)替我們干這個(gè)重復(fù)性的活了!
直接上代碼:
from win32com.client import Dispatch,constants,gencache
import time
import os
path = os.getcwd()
start_time = time.time()
files = os.listdir(path)
gencache.EnsureModule('{00020905-0000-0000-C000-000000000046}',0,8,4)
wd = Dispatch('Word.Application')
for file in files:
if file.split('.')[-1] in ['docx','doc']:
word_path = path + '\\'+ file
file_list = (file.split('.')[-2::-1])[::-1]
pdf_file = "".join(file_list)
pdf_path = path + '\\'+ pdf_file + '.pdf'
print('正在轉(zhuǎn)換:')
print('《{}》'.format(file))
doc = wd.Documents.Open(word_path,ReadOnly=1)
doc.ExportAsFixedFormat(pdf_path,constants.wdExportFormatPDF,Item=constants.wdExportDocumentWithMarkup,CreateBookmarks=constants.wdExportCreateHeadingBookmarks)
print('上述文件轉(zhuǎn)換完成!')
print('')
wd.Quit(constants.wdDoNotSaveChanges)
end_time = time.time()
print("該文件夾下的Word文件已轉(zhuǎn)為PDF,用時(shí):{:.2f}秒!".format(z,end_time-start_time))
time.sleep(5)
代碼解釋
這個(gè)程序可以操作任意文件夾,不受文件夾所在位置的影響。
只需要將它丟在需要轉(zhuǎn)換的 Word 文件文件夾里,它就可以讀取出所在文件夾下所有的 Word 文件,并進(jìn)行轉(zhuǎn)換。
主要用到了下面幾個(gè)方法:
1、獲取任意文件夾下文件名稱
import os
path = os.getcwd()
files = os.listdir(path)
os.getcwd():獲取程序所在文件的路徑,結(jié)果存入 path 中;os.listdir():獲取 path 路徑下的所有文件名稱,結(jié)果存入 files 中。
2、篩選出 Word 文件
for file in files:
if file.split('.')[-1] in ['docx','doc']:
使用字符串的split函數(shù),用.號(hào)將文件名稱分割。
file.split('.')[-1]:將 Word 文件的名稱以.號(hào)分割,形成一個(gè)列表,取出這個(gè)列表的最后一項(xiàng)(即 Word 文件后綴名稱),判斷其是不是docx或doc,如果是,則說(shuō)明是 Word 文件,則生成兩個(gè)路徑:
3、計(jì)算出 Word、PDF 的路徑
word_path = path + '\\'+ file
file_list = (file.split('.')[-2::-1])[::-1]
pdf_file = "".join(file_list)
pdf_path = path + '\\'+ pdf_file + '.pdf'
word_path:Word 文件路徑,用來(lái)告訴程序打開(kāi)哪一個(gè) Word 文件;pdf_path:PDF 文件路徑,用來(lái)告訴程序,轉(zhuǎn)換后的 PDF 文件名稱和存儲(chǔ)路徑。
在計(jì)算 PDF 文件路徑時(shí),需要先去掉 Word 文件的后綴:docx或doc,再加上.pdf。
有時(shí)候,Word 文件的名稱中可能含有多個(gè).號(hào),因?yàn)槲覀兪峭ㄟ^(guò).號(hào)將 Word 文件名稱分割的,這樣可能會(huì)導(dǎo)致計(jì)算的 PDF 文件名稱和 Word 文件名稱不同。
因此,為了避免出現(xiàn)這種樣的錯(cuò)誤,我們進(jìn)行以下操作:
(file.split('.')[-2::-1]):按照逆序,取出除了后綴名稱外的內(nèi)容。(file.split('.')[-2::-1])[::-1]:轉(zhuǎn)為正序,即正常的文件名稱。pdf_file = "".join(file_list):將列表拼接成一個(gè)字符串。pdf_path = path + '\\'+ pdf_file + '.pdf':最后給文件名稱加上.pdf的后綴。
這樣就完成了 Word、PDF 的路徑計(jì)算。
4、調(diào)用 Word 功能
下面這些代碼的功能是調(diào)用 Word 程序:
gencache.EnsureModule('{00020905-0000-0000-C000-000000000046}',0,8,4)
# 這是指向注冊(cè)表的鍵,我們要調(diào)用它。
wd = Dispatch('Word.Application')
#啟用 Word
doc = wd.Documents.Open(word_path,ReadOnly=1)
# 只讀方式打開(kāi) Word 文檔
wd.Quit(constants.wdDoNotSaveChanges)
# 關(guān)閉 Word
關(guān)鍵操作就是下面這行代碼,它定義了按特定格式導(dǎo)出的參數(shù),模擬人工操作。
doc.ExportAsFixedFormat(pdf_path,constants.wdExportFormatPDF,Item=constants.wdExportDocumentWithMarkup,CreateBookmarks=constants.wdExportCreateHeadingBookmarks)
以上就是這期分享的全部?jī)?nèi)容了
