技术总编辑:张涵
写在前面:
大家在学习和工作的过程中,经常需要将WORD文档转换成PDF文件。 对于单个文件,我们可以手动完成,但是当我们不得不处理大量文件时,这些单调重复的工作真的很费时费力。 今天小编就来分享一下如何将WORD批量转PDF,实现办公自动化的第一步。 如果你也想解放双手,不妨继续往下看~
单文件处理
中,我们使用win32com来处理Word和Excel文档,这里继续使用这个功能强大的第三方库。 同样,先导入win32com,进行初始化设置:
import win32comfrom win32com.client import Dispatchapp = Dispatch('Word.Application')app.Visible = 1 # 后台运行,不显示app.DisplayAlerts = 0 # 不警告
对于单个文件,我们可以使用以下代码行来完成:
word = Dispatch('Word.Application') #打开WordwdFormatPDF = 17doc = word.Documents.Open(r"D:winwork1.docx") #打开文档doc.SaveAs(r"D:winwork1", FileFormat=wdFormatPDF) #文件转换doc.SaveAs(r"D:winwork1".replace(".docx", ".pdf"), FileFormat=wdFormatPDF) #文件转换
结果如下:
批处理文件
更一般的,我们要转换一个目录下的多个文件,所以我们的思路也分为两步: 1、定义一个函数,将WORD文档转换成PDF; 2.遍历目录,进行批量转换处理。 在Python中的实现过程如下:
from win32com.client import Dispatchfrom os import walk#定义一个函数,将Word转为PDFwdFormatPDF = 17def 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() #关闭Wordprint(file) #打印文档名称以显示程序进度#遍历指定路径下的所有文件,如果格式为doc或docx,转化为PDFif __name__ == "__main__":doc_files = []directory = r"C:UsersasusDesktopexp"for root, dirs, filenames in walk(directory):for file in filenames:if file.endswith(".doc") or file.endswith(".docx"):doc2pdf(str(root + "\" + file))
批量生成证书并转换格式
在中word文档左侧目录怎么显示,我们介绍了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 = 48p.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 = 12p.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:UsersasusDesktopexpmodel.doc", 16) # 存储文件doc.Close()app.Quit()
执行上面的代码,我们可以得到如图所示的文档:
2、替换名称,另存为Word:
list=["张可可","李盼盼","王欢欢","高莎莎"] #将所有人名放入一个列表app = Dispatch('Word.Application')app.Visible = 1app.DisplayAlerts = 0for i in range(0,4):new=list[i] #定义一个变量存储姓名doc=app.Documents.Open(r"C:UsersasusDesktopexpmodel.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:UsersasusDesktopexp"+doc_name) # 存储doc.Close()app.Quit()
这样,我们就生成了四个新的Word文档,每个文档的内容都进行了替换:
3、将上面生成的WORD文档转换为PDF:
我们设置路径并执行(2)中的代码:
from win32com.client import Dispatchfrom os import walk#定义一个函数,将Word转为PDFwdFormatPDF = 17def 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() #关闭Wordprint(file) #打印文档名称以显示程序进度#遍历指定路径下的所有文件,如果格式为doc或docx,转化为PDFif __name__ == "__main__":doc_files = []directory = r"C:UsersasusDesktopexp"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文档word文档左侧目录怎么显示,一定要试试win32com~
如果我们推文累计打赏超过1000元,我们会开具发票,发票类别为“咨询费”。 用心做事,不负众望!
过去推文推荐
关于我们
微信公众号“Stata与Python数据分析”分享stata、python等软件的实用数据处理知识,欢迎转载打赏。 我们是李春涛教授带领的由研究生和本科生组成的大数据处理与分析团队。
另外也欢迎大家积极投稿,介绍一些关于stata和python的数据处理和分析技巧。
投稿邮箱:statatarining@163.com
提交要求:
1)必须原创,禁止抄袭;
2)必须准确、详细、有例子和截图;
防范措施:
1)所有投稿将由公众号运营团队成员审核,审核通过后方可受理。 一旦被接受,作者将在推文中签名并获得赏金。
2)请在邮件中注明投稿,邮件名称为“投稿+推文名称”。
3)应读者要求,现开通付费问答服务。 如果遇到数据处理分析方面的问题,可以在公众号提问。 您只需支付少量奖励,我们将在稍后的推文中予以回复。




