python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python Word转PDF

Python脚本自动化实现Word转PDF全攻略(建议收藏)

作者:Kyln.Wu

这篇文章主要为大家详细介绍了Python如何利用脚本自动化实现Word转PDF,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

场景故事

作为HR,我曾经每周都要处理几十份员工培训材料的格式转换工作。领导要求所有培训文档必须统一转换为PDF格式,方便存档和线上分享。最开始,我只能一份份手动在Word里另存为PDF,每次转换都要盯着进度条发呆,生怕出错。

直到有一天,我发现了Python的这个自动化脚本。现在,同样的工作量,我只需要运行一个脚本,喝杯咖啡的功夫就全部搞定。更重要的是,这个脚本还能处理批量转换,再也不用担心月底绩效考核时文档堆积如山了。

今天我要分享的这个Python脚本,不仅能帮你自动化Word转PDF,还能扩展到各种文档处理场景。无论你是HR、行政还是文案工作者,这个技能都能让你效率翻倍!

核心代码解析

让我们先来看看这个神奇的脚本是如何工作的:

import comtypes.client
wdFormatPDF = 17

def doc_to_pdf(input_file_path, output_file_path):
    word = comtypes.client.CreateObject('Word.Application')
    doc = word.Documents.Open(input_file_path)
    doc.SaveAs(output_file_path, FileFormat=wdFormatPDF)
    doc.Close()
    word.Quit()

代码中文注释版

# 导入COM对象客户端库,用于控制Windows应用程序
import comtypes.client

# 定义Word中PDF格式的常量值
wdFormatPDF = 17

def doc_to_pdf(input_file_path, output_file_path):
    """
    将Word文档转换为PDF格式
    
    参数:
        input_file_path (str): 输入的Word文档路径
        output_file_path (str): 输出的PDF文件路径
    """
    # 创建Word应用程序的COM对象
    word = comtypes.client.CreateObject('Word.Application')
    
    try:
        # 打开指定的Word文档
        doc = word.Documents.Open(input_file_path)
        
        # 将文档另存为PDF格式
        # wdFormatPDF=17 是Word中PDF格式的标识符
        doc.SaveAs(output_file_path, FileFormat=wdFormatPDF)
        
        # 关闭文档
        doc.Close()
    finally:
        # 无论转换是否成功,都要退出Word应用程序
        word.Quit()

代码价值分析

三维价值评估

HR专业视角

"这个脚本本质上是’流程标准化’的技术实现,就像我们制定招聘流程一样:

关键技术解剖台

COM对象编程的职场类比

HR眼中的技术价值

对应人力资源管理中的标准化操作流程(SOP),解决人为操作误差痛点。就像我们制定招聘流程一样,这个脚本将复杂的Word转PDF操作固化为一套标准程序。

技术三棱镜

复杂度可视化

pie 
    title 资源消耗分布
    "CPU占用" : 15
    "内存消耗" : 25
    "COM对象通信" : 60

扩展应用场景

场景迁移实验室

案例1:Word转PDF→批量文档处理改造指南

import os

def batch_convert(input_folder, output_folder):
    """
    批量转换Word文档为PDF
    
    参数:
        input_folder (str): 包含Word文档的文件夹路径
        output_folder (str): 输出PDF的文件夹路径
    """
    # 确保输出文件夹存在
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)
    
    # 遍历输入文件夹中的所有文件
    for filename in os.listdir(input_folder):
        if filename.endswith('.docx') or filename.endswith('.doc'):
            input_path = os.path.join(input_folder, filename)
            output_path = os.path.join(output_folder, 
                                      os.path.splitext(filename)[0] + '.pdf')
            try:
                doc_to_pdf(input_path, output_path)
                print(f"成功转换: {filename}")
            except Exception as e:
                print(f"转换失败 {filename}: {str(e)}")

# 使用示例
batch_convert('input_docs', 'output_pdfs')

改造收益:处理上百份文档只需几分钟

案例2:Word转PDF+邮件发送跨界融合

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders

def send_pdf_via_email(pdf_path, recipient):
    """
    发送PDF文件作为邮件附件
    
    参数:
        pdf_path (str): PDF文件路径
        recipient (str): 收件人邮箱
    """
    # 创建邮件对象
    msg = MIMEMultipart()
    msg['From'] = 'your_email@example.com'
    msg['To'] = recipient
    msg['Subject'] = '培训材料 - 请查收'
    
    # 添加PDF附件
    with open(pdf_path, 'rb') as f:
        part = MIMEBase('application', 'octet-stream')
        part.set_payload(f.read())
        encoders.encode_base64(part)
        part.add_header('Content-Disposition', 
                       f'attachment; filename={os.path.basename(pdf_path)}')
        msg.attach(part)
    
    # 连接SMTP服务器并发送
    with smtplib.SMTP('smtp.example.com') as server:
        server.login('username', 'password')
        server.send_message(msg)

# 结合转换和发送
def convert_and_send(input_doc, recipient):
    output_pdf = os.path.splitext(input_doc)[0] + '.pdf'
    doc_to_pdf(input_doc, output_pdf)
    send_pdf_via_email(output_pdf, recipient)

创新价值:创建自动化文档分发系统

实战案例分享

作为HR,我曾用这个脚本解决了一个棘手问题:公司年度培训结束后,需要将所有培训材料转换为PDF并分发给各部门。传统方式需要手动逐个转换再发送邮件,至少需要两天时间。

我修改了脚本,添加了批量处理和自动发送功能:

import os
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders

def batch_convert_and_email(input_folder, department_emails):
    """
    批量转换Word文档为PDF并通过邮件发送给指定部门
    
    参数:
        input_folder (str): 包含Word文档的文件夹路径
        department_emails (dict): 部门名称到邮箱列表的映射
    """
    # 确保输出文件夹存在
    output_folder = 'output_pdfs'
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)
    
    # 遍历输入文件夹中的所有文件
    for filename in os.listdir(input_folder):
        if filename.endswith('.docx') or filename.endswith('.doc'):
            input_path = os.path.join(input_folder, filename)
            
            # 从文件名中提取部门信息(假设格式为"部门_培训材料.docx")
            try:
                department = filename.split('_')[0]
                if department in department_emails:
                    output_path = os.path.join(output_folder, 
                                              os.path.splitext(filename)[0] + '.pdf')
                    
                    # 转换文档
                    doc_to_pdf(input_path, output_path)
                    
                    # 发送给相关部门
                    for email in department_emails[department]:
                        send_pdf_via_email(output_path, email)
            except Exception as e:
                print(f"处理 {filename} 时出错: {str(e)}")

# 部门邮箱映射
departments = {
    'HR': ['hr@company.com', 'manager_hr@company.com'],
    'IT': ['it_team@company.com'],
    'Finance': ['finance@company.com']
}

# 执行批量转换和发送
batch_convert_and_email('training_materials', departments)

这个改进版本让我在1小时内完成了原本需要2天的工作量,而且确保了每位员工都能及时收到自己部门的培训材料。

常见问题解决方案

1. 如何处理没有安装Word的电脑

如果目标电脑没有安装Microsoft Word,可以考虑以下替代方案:

2. 如何提高转换成功率

添加错误处理和日志记录功能:

import logging

logging.basicConfig(filename='conversion.log', level=logging.INFO)

def doc_to_pdf_robust(input_file_path, output_file_path):
    try:
        word = comtypes.client.CreateObject('Word.Application')
        word.Visible = False  # 后台运行
        doc = word.Documents.Open(input_file_path)
        doc.SaveAs(output_file_path, FileFormat=wdFormatPDF)
        doc.Close()
        word.Quit()
        logging.info(f"成功转换: {input_file_path} -> {output_file_path}")
    except Exception as e:
        logging.error(f"转换失败 {input_file_path}: {str(e)}")
        raise

总结

今天分享的这个Word转PDF脚本虽然简单,却蕴含着深刻的职场智慧。它教会我们如何用技术手段解决重复性问题,如何将HR的专业思维转化为技术方案。

到此这篇关于Python脚本自动化实现Word转PDF全攻略(建议收藏)的文章就介绍到这了,更多相关Python Word转PDF内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文