作为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专业视角
"这个脚本本质上是’流程标准化’的技术实现,就像我们制定招聘流程一样:
对应人力资源管理中的标准化操作流程(SOP),解决人为操作误差痛点。就像我们制定招聘流程一样,这个脚本将复杂的Word转PDF操作固化为一套标准程序。
wdFormatPDF=17
相当于HR系统中的"流程节点标识"pie
title 资源消耗分布
"CPU占用" : 15
"内存消耗" : 25
"COM对象通信" : 60
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')
▶️ 改造收益:处理上百份文档只需几分钟
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'] = '[email protected]'
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': ['[email protected]', '[email protected]'],
'IT': ['[email protected]'],
'Finance': ['[email protected]']
}
# 执行批量转换和发送
batch_convert_and_email('training_materials', departments)
这个改进版本让我在1小时内完成了原本需要2天的工作量,而且确保了每位员工都能及时收到自己部门的培训材料。
如果目标电脑没有安装Microsoft Word,可以考虑以下替代方案:
添加错误处理和日志记录功能:
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的专业思维转化为技术方案。
完整代码已开源,包含详细的注释文档:
[GitCode仓库] https://gitcode.com/laonong-1024/python-automation-scripts
[备用下载] https://pan.quark.cn/s/654cf649e5a6 提取码:f5VG
作为HR转型的代码手艺人,我将继续探索如何将人力资源管理思维与编程技术相结合,创造更多提升工作效率的工具。如果你对这个话题感兴趣,欢迎关注我的公众号,获取更多职场编程干货!