用Python如何把任意文件夹下的Word文档批量转换为PDF

原创 码农  2020-02-11 11:01:29  阅读 270 次 评论 0 条

日常工作中经常需要进行文件类型的转换,有时还要批量操作,如要把近百个 Word 文档需要转为 PDF, 怎么办?

难道要一个一个的导出吗?

确实,Office2010 以后版本的 Word 可以直接导出 PDF,是时候让 Python 来替我们干这个重复性的活了!

直接上代码

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('正在转换:')
        print('《{}》'.format(file))
        doc = wd.Documents.Open(word_path,ReadOnly=1)
        doc.ExportAsFixedFormat(pdf_path,constants.wdExportFormatPDF,Item=constants.wdExportDocumentWithMarkup,CreateBookmarks=constants.wdExportCreateHeadingBookmarks)
        print('上述文件转换完成!')
        print('')
wd.Quit(constants.wdDoNotSaveChanges)
end_time = time.time()
print("该文件夹下的Word文件已转为PDF,用时:{:.2f}秒!".format(z,end_time-start_time))
time.sleep(5)

代码解释

这个程序可以操作任意文件夹,不受文件夹所在位置的影响。

只需要将它丢在需要转换的 Word 文件文件夹里,它就可以读取出所在文件夹下所有的 Word 文件,并进行转换。

主要用到了下面几个方法:

1、获取任意文件夹下文件名称

import os
path = os.getcwd()
files = os.listdir(path)
  • os.getcwd() :获取程序所在文件的路径,结果存入 path 中;
  • os.listdir():获取 path 路径下的所有文件名称,结果存入 files 中。

2、筛选出 Word 文件

for file in files:
    if file.split('.')[-1] in ['docx','doc']:

使用字符串的split函数,用.号将文件名称分割。

file.split('.')[-1]:将 Word 文件的名称以.号分割,形成一个列表,取出这个列表的最后一项(即 Word 文件后缀名称),判断其是不是docxdoc,如果是,则说明是 Word 文件,则生成两个路径:

3、计算出 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 文件路径,用来告诉程序打开哪一个 Word 文件;
  • pdf_path:PDF 文件路径,用来告诉程序,转换后的 PDF 文件名称和存储路径。

在计算 PDF 文件路径时,需要先去掉 Word 文件的后缀:docxdoc,再加上.pdf

有时候,Word 文件的名称中可能含有多个.号,因为我们是通过.号将 Word 文件名称分割的,这样可能会导致计算的 PDF 文件名称和 Word 文件名称不同。

因此,为了避免出现这种样的错误,我们进行以下操作:

  1. (file.split('.')[-2::-1]):按照逆序,取出除了后缀名称外的内容。
  2. (file.split('.')[-2::-1])[::-1]:转为正序,即正常的文件名称。
  3. pdf_file = "".join(file_list):将列表拼接成一个字符串。
  4. pdf_path = path + '\\'+ pdf_file + '.pdf':最后给文件名称加上.pdf的后缀。

这样就完成了 Word、PDF 的路径计算。

4、调用 Word 功能

下面这些代码的功能是调用 Word 程序:

gencache.EnsureModule('{00020905-0000-0000-C000-000000000046}',0,8,4)
# 这是指向注册表的键,我们要调用它。

wd = Dispatch('Word.Application')
#启用 Word

doc = wd.Documents.Open(word_path,ReadOnly=1)
# 只读方式打开 Word 文档

wd.Quit(constants.wdDoNotSaveChanges)
# 关闭 Word

关键操作就是下面这行代码,它定义了按特定格式导出的参数,模拟人工操作。

doc.ExportAsFixedFormat(pdf_path,constants.wdExportFormatPDF,Item=constants.wdExportDocumentWithMarkup,CreateBookmarks=constants.wdExportCreateHeadingBookmarks)
本文地址:https://www.itcodeit.com/post/73.html
版权声明:本文为原创文章,版权归 码农 所有,欢迎分享本文,转载请保留出处!

发表评论


表情

还没有留言,还不快点抢沙发?