1 '''
2 #python批量将word文档转换成PDF文件3 '''
4 #导入所需库
5 from docx importDocument6 from docx.enum.text importWD_PARAGRAPH_ALIGNMENT7 from docx.shared importPt8 from docx.shared importInches9 from docx.oxml.ns importqn10 from win32com.client importDispatch, constants, gencache11 importos12 importtime13
14 #定义今日黄金价格
15 price = input("请输入今日黄金价格:")16 #定义今日日期
17 today = time.strftime("%Y{y}%m{m}%d{d}",time.localtime()).format(y='年',m='月',d='日')18 #定义客户列表
19 company_list = ['张三','李四','王五','赵六','许七']20
21
22 #开始循环列表,每循环一次创建一个word文档
23 for customer incompany_list:24 #开始创建word文档
25 document =Document()26 #定义文档初始格式
27 document.styles['Normal'].font.name = '微软雅黑'
28 document.styles['Normal'].font.size = Pt(12)29 #设置文档中文字体默认格式
30 document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'),u'微软雅黑')31
32 #增加图片
33 document.add_picture('D:/Python代码素材/word自动化办公/banner.jpg', width=Inches(6))34
35 #向文档中增加第一自然段
36 p1 =document.add_paragraph()37 #设置第一自然段格式
38 p1.alignment =WD_PARAGRAPH_ALIGNMENT.CENTER39 #向第一自然段添加内容
40 run1 = p1.add_run('关于下达%s的价格通知' %today )41 #设置内容格式
42 run1.font.name = '黑体'
43 run1.font.size = Pt(25)44 run1.font.bold =True45 #设置中文字体格式
46 run1._element.rPr.rFonts.set(qn('w:eastAsia'),u'黑体')47
48 #设置第一自然段的段前段后距离
49 p1.space_after = Pt(5)50 p1.space_before = Pt(5)51
52 #增加第二自然段
53 p2 =document.add_paragraph()54 #设置第二自然段格式
55 p2.alignment =WD_PARAGRAPH_ALIGNMENT.LEFT56 #增加内容
57 run2 = p2.add_run('尊敬的:' + customer + ', 您好!')58 #设置内容格式
59 run2.font.name = '微软雅黑'
60 run2.font.size = Pt(18)61 run2.font.bold =True62 #设置中文字体格式
63 run2._element.rPr.rFonts.set(qn('w:eastAsia'),u'微软雅黑')64
65 #增加第三自然段
66 p3 =document.add_paragraph()67 #设置第三自然段对齐方式
68 p3.alignment =WD_PARAGRAPH_ALIGNMENT.LEFT69 #增加内容
70 run3 = p3.add_run('为提供优质客户服务,我公司现将%s的黄金价格通知如下!' %today)71 #设置格式
72 run3.font.name = '仿宋_GB2312'
73 run3.font.size = Pt(16)74 run3.font.bold =True75 #设置中文格式
76 run3._element.rPr.rFonts.set(qn('w:eastAsia'),u'仿宋_GB2312')77
78 #增加表格
79 table = document.add_table(rows=3,cols=3,style="Table Grid")80 #合并第一列的单元格
81 table.cell(0, 0).merge(table.cell(0, 2))82 #设置合并后的单元格的格式
83 table.cell(0, 0).paragraphs[0].alignment =WD_PARAGRAPH_ALIGNMENT.CENTER84 #向合并后的单元格内写入内容
85 table_run = table.cell(0, 0).paragraphs[0].add_run('关于下达%s的价格通知' %today)86 #设置字体
87 table_run.font.name = '隶书'
88 table_run.font.size = Pt(15)89 table_run.font.bold =True90 #设置中文字体格式
91 table_run._element.rPr.rFonts.set(qn('w:eastAsia'),u'隶书')92
93 #开始向其他单元格写入内容,设置每个单元格的文字内容居中
94 table.cell(1, 0).text = '日期'
95 table.cell(1, 0).paragraphs[0].alignment =WD_PARAGRAPH_ALIGNMENT.CENTER96 table.cell(1, 1).text = '价格'
97 table.cell(1, 1).paragraphs[0].alignment =WD_PARAGRAPH_ALIGNMENT.CENTER98 table.cell(1, 2).text = '备注'
99 table.cell(1, 2).paragraphs[0].alignment =WD_PARAGRAPH_ALIGNMENT.CENTER100
101 table.cell(2, 0).text =today102 table.cell(2, 0).paragraphs[0].alignment =WD_PARAGRAPH_ALIGNMENT.CENTER103 table.cell(2, 1).text =price104 table.cell(2, 1).paragraphs[0].alignment =WD_PARAGRAPH_ALIGNMENT.CENTER105 table.cell(2, 2).text = '这里是备注'
106 table.cell(2, 2).paragraphs[0].alignment =WD_PARAGRAPH_ALIGNMENT.CENTER107
108 #增加第四自然段
109 p4 =document.add_paragraph()110 #设置第四自然段靠右对齐
111 p4.alignment =WD_PARAGRAPH_ALIGNMENT.RIGHT112 #第四自然段增加内容
113 run4 = p4.add_run('(联系人:小刘 电话:18888888888)')114 #设置字体格式
115 run4.font.name = '幼圆'
116 run4.font.size = Pt(16)117 run4.font.bold =True118 #设置中文字体格式
119 run4._element.rPr.rFonts.set(qn('w:eastAsia'),u'幼圆')120
121 #增加分页符
122 document.add_page_break()123 #在分页后增加第五自然段
124 p5 =document.add_paragraph()125 #设置第五自然段对齐方式
126 p5.alignment =WD_PARAGRAPH_ALIGNMENT.CENTER127 #增加第五自然段内容
128 run5 =p5.add_run()129 run5.font.name = '方正舒体'
130 run5.font.size = Pt(30)131 run5.font.bold =True132 run5._element.rPr.rFonts.set(qn('w:eastAsia'),u'方正舒体')133
134 #判定要存储的文件是否存在,如果存在就删除
135 if os.path.exists('%s-%s-价格通知.docx' %(customer, today)):136 os.remove('%s-%s-价格通知.docx' %(customer, today))137 #休眠五秒以待代码完成
138 time.sleep(1)139
140 #保存文档
141 document.save('%s-%s-价格通知.docx' %(customer, today))142
143 #利用保存后的word文档转换PDF
144 #先找word文档位置
145 docx_path = '%s-%s-价格通知.docx' %(customer, today)146 #要保存pdf文件的位置
147 pdf_path = '%s-%s-价格通知.pdf' %(customer, today)148 #调用gencache指向office功能
149 gencache.EnsureModule('{00020905-0000-0000-C000-000000000046}', 0, 8, 4)150 #调用word控件
151 wd = Dispatch('Word.Application')152 #以只读方式打开word文档
153 doc = wd.Documents.Open(docx_path, ReadOnly=1)154 #导出生成的pdf文档
155 doc.ExportAsFixedFormat(pdf_path, constants.wdExportFormatPDF, Item=wdExportDocumentWithMarkup,156 CreateBookmarks=constants.wdExportCreateHeadingBookmarks)157 wd.Quit(constants.wdDoNotSaveChanges)158 time.sleep(5)159 if os.path.exists('%s-%s-价格通知.docx' %(customer, today)):160 os.remove('%s-%s-价格通知.docx' %(customer, today))161