让程序帮你干活!批量转换任意文件夹下Word文档为PDF

手上有近百个 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)

以上就是这期分享的全部内容了,关注我的公众号,回复【pdf】获取源码。


猜你喜欢:
1. 一文学懂Python数据结构之字符串基础知识
2. 这是format函数的骚操作???
3. 用Markdown,3分钟搞定微信公众号文章排版!
4. PPT居然还可以一键换色!学会这4招再也不怕色了……
5. 7步完成MySQL配置,极简教程,还不来试试?
6. 4 行代码实现批量、快速安装 Python 第三方库


扫描下方二维码,
回复【课程】获取精选视频课程!

让程序帮你干活!批量转换任意文件夹下Word文档为PDF_第1张图片

觉得好看就点个在看吧……

你可能感兴趣的:(让程序帮你干活!批量转换任意文件夹下Word文档为PDF)