批量实现WORD转PDF
本文作者:张馨月
文字编辑:钱梦璇
写在前面:
大家在学习办公的过程中经常需要将WORD文档转为PDF文件,面对单个文件我们可以通过手动操作来实现,但当我们要处理大量文件时,这些单调重复的工作着实费时费力。今天,小编就来分享一下如何批量完成WORD转PDF,实现自动化办公的第一步。如果你也想要解放双手,不妨继续往下看吧~
单个文件的处理
在《新的一年,效率满满~(上)》《新的一年,效率满满~(下)》中,我们使用了win32com来处理Word和Excel文档,这里我们继续使用这个强大的第三方库。同样地,先导入win32com并进行初始化设置:
import win32com
from win32com.client import Dispatch
app = Dispatch('Word.Application')
app.Visible = 1 # 后台运行,不显示
app.DisplayAlerts = 0 # 不警告
对于单个文件,我们用下面几行代码就可以搞定:
word = Dispatch('Word.Application') #打开Word
wdFormatPDF = 17
doc = word.Documents.Open(r"D:\win\work1.docx") #打开文档
doc.SaveAs(r"D:\win\work1", FileFormat=wdFormatPDF) #文件转换
doc.SaveAs(r"D:\win\work1".replace(".docx", ".pdf"), FileFormat=wdFormatPDF) #文件转换
结果如下:
批量处理文件
更一般的情况下,我们想要将一个目录下的多个文件进行转换,因此我们的思路也分为两步:1.定义一个函数,将WORD文档转为PDF;2.遍历目录,进行批量处理。在Python中的实现过程如下:
from win32com.client import Dispatch
from os import walk
#定义一个函数,将Word转为PDF
wdFormatPDF = 17
def doc2pdf(input_file):
word = Dispatch('Word.Application')
doc = word.Documents.Open(input_file)
if file.endswith(".doc"):
doc.SaveAs(input_file.replace(".doc", ".pdf"), FileFormat=wdFormatPDF)
if file.endswith(".docx"):
doc.SaveAs(input_file.replace(".docx", ".pdf"), FileFormat=wdFormatPDF)
doc.Close() #关闭文档
word.Quit() #关闭Word
print(file) #打印文档名称以显示程序进度
#遍历指定路径下的所有文件,如果格式为doc或docx,转化为PDF
if __name__ == "__main__":
doc_files = []
directory = r"C:\Users\asus\Desktop\exp"
for root, dirs, filenames in walk(directory):
for file in filenames:
if file.endswith(".doc") or file.endswith(".docx"):
doc2pdf(str(root + "\\" + file))
批量生成奖状并转化格式
在《新的一年,效率满满~(上)》中,我们介绍了Word对win32com的基本操作,今天我们就结合之前分享的内容,感受一下自动化办公的高效之处~
1.生成简易版奖状:
app = Dispatch('Word.Application')
app.Visible = 1 # 后台运行,不显示
app.DisplayAlerts = 0 # 不警告
word = Dispatch('Word.Application') #打开Word
#新建文档
doc = app.Documents.Add()
cm_to_points = 28.35
#设置纸张格式
doc.PageSetup.TopMargin = 3.3*cm_to_points # 上边距3.3厘米
doc.PageSetup.BottomMargin = 3.3*cm_to_points # 下边距3.3厘米
doc.PageSetup.LeftMargin = 2.8*cm_to_points # 左边距2.8厘米
doc.PageSetup.RightMargin = 2.6*cm_to_points # 右边距2.8厘米
doc.PageSetup.Orientation=1 #页面水平放置
#创建函数,输入标题
def para(text=''):
p = doc.Paragraphs.Add()
p.Range.Font.Name = '隶书'
p.Range.Font.Size = 48
p.Range.ParagraphFormat.Alignment = 1 # 012分别代表居左/中/右
p.Range.ParagraphFormat.LineSpacing = 12 # 行间距
p.Range.InsertBefore(text) # 插入内容
para(text='奖状')
#创建函数,输入正文
def para(text=''):
p = doc.Paragraphs.Add()
p.Range.Font.Name = '宋体'
p.Range.Font.Size = 12
p.Range.ParagraphFormat.Alignment = 0 # 012分别代表居左/中/右
p.Range.ParagraphFormat.LineSpacing = 12 # 行间距
p.Range.InsertBefore(text) # 插入内容
p.CharacterUnitLeftIndent=3#设置段落缩进,左侧的值
p.CharacterUnitRightIndent=6#设置段落缩进,右侧的值
para(text='王某某获得三等奖')
doc.SaveAs(r"C:\Users\asus\Desktop\exp\model.doc", 16) # 存储文件
doc.Close()
app.Quit()
执行上述代码,我们就能得到一个如图所示的文档:
2.替换人名并保存为Word:
list=["张可可","李盼盼","王欢欢","高莎莎"] #将所有人名放入一个列表
app = Dispatch('Word.Application')
app.Visible = 1
app.DisplayAlerts = 0
for i in range(0,4):
new=list[i] #定义一个变量存储姓名
doc=app.Documents.Open(r"C:\Users\asus\Desktop\exp\model.doc") #打开第一步中生成的Word文档
app.Selection.Find.ClearFormatting()
app.Selection.Find.Replacement.ClearFormatting()
app.Selection.Find.Execute('王某某', False, False, False, False, False, True, 1, True,new, 2) #将“王某某”替换为新的姓名
doc_name = "./%s.doc" % list[i] #定义文件名称为姓名
doc.SaveAs(r"C:\Users\asus\Desktop\exp"+doc_name) # 存储
doc.Close()
app.Quit()
这样,我们就生成了四个新的Word文档,并且每个文档的内容都实现了替换:
3.将上述生成的WORD文档转为PDF:
我们对路径进行设置,执行(二)中的代码即可:
from win32com.client import Dispatch
from os import walk
#定义一个函数,将Word转为PDF
wdFormatPDF = 17
def doc2pdf(input_file):
word = Dispatch('Word.Application')
doc = word.Documents.Open(input_file)
if file.endswith(".doc"):
doc.SaveAs(input_file.replace(".doc", ".pdf"), FileFormat=wdFormatPDF)
if file.endswith(".docx"):
doc.SaveAs(input_file.replace(".docx", ".pdf"), FileFormat=wdFormatPDF)
doc.Close() #关闭文档
word.Quit() #关闭Word
print(file) #打印文档名称以显示程序进度
#遍历指定路径下的所有文件,如果格式为doc或docx,转化为PDF
if __name__ == "__main__":
doc_files = []
directory = r"C:\Users\asus\Desktop\exp"
for root, dirs, filenames in walk(directory):
for file in filenames:
if file.endswith(".doc") or file.endswith(".docx"):
doc2pdf(str(root + "\\" + file))
打开文件位置,就可以看到所有PDF文档都轻松生成啦:
今天的分享就到这里,今后大家再遇到大量Word文档需要处理时,一定要试试win32com~
NBA球员薪资分析——基于随机森林算法(二)
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。