前面有一篇<Python批量创建word文档(2)- 加图片和表格>的文章,利用这篇文章创建的word文档来批量转PDF文档。代码:
1 \'\'\' 2 #python批量将word文档转换成PDF文件 3 \'\'\' 4 #导入所需库 5 from docx import Document 6 from docx.enum.text import WD_PARAGRAPH_ALIGNMENT 7 from docx.shared import Pt 8 from docx.shared import Inches 9 from docx.oxml.ns import qn 10 from win32com.client import Dispatch, constants, gencache 11 import os 12 import time 13 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 in company_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.CENTER 39 #向第一自然段添加内容 40 run1 = p1.add_run(\'关于下达%s的价格通知\' % today ) 41 #设置内容格式 42 run1.font.name = \'黑体\' 43 run1.font.size = Pt(25) 44 run1.font.bold = True 45 #设置中文字体格式 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.LEFT 56 #增加内容 57 run2 = p2.add_run(\'尊敬的: \' + customer + \', 您好!\') 58 #设置内容格式 59 run2.font.name = \'微软雅黑\' 60 run2.font.size = Pt(18) 61 run2.font.bold = True 62 #设置中文字体格式 63 run2._element.rPr.rFonts.set(qn(\'w:eastAsia\'),u\'微软雅黑\') 64 65 #增加第三自然段 66 p3 = document.add_paragraph() 67 #设置第三自然段对齐方式 68 p3.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT 69 #增加内容 70 run3 = p3.add_run(\' 为提供优质客户服务,我公司现将%s的黄金价格通知如下!\' % today) 71 #设置格式 72 run3.font.name = \'仿宋_GB2312\' 73 run3.font.size = Pt(16) 74 run3.font.bold = True 75 #设置中文格式 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.CENTER 84 #向合并后的单元格内写入内容 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 = True 90 #设置中文字体格式 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.CENTER 96 table.cell(1, 1).text = \'价格\' 97 table.cell(1, 1).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER 98 table.cell(1, 2).text = \'备注\' 99 table.cell(1, 2).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER 100 101 table.cell(2, 0).text = today 102 table.cell(2, 0).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER 103 table.cell(2, 1).text = price 104 table.cell(2, 1).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER 105 table.cell(2, 2).text = \'这里是备注\' 106 table.cell(2, 2).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER 107 108 #增加第四自然段 109 p4 = document.add_paragraph() 110 #设置第四自然段靠右对齐 111 p4.alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT 112 #第四自然段增加内容 113 run4 = p4.add_run(\'(联系人:小刘 电话:18888888888)\') 114 #设置字体格式 115 run4.font.name = \'幼圆\' 116 run4.font.size = Pt(16) 117 run4.font.bold = True 118 #设置中文字体格式 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.CENTER 127 #增加第五自然段内容 128 run5 = p5.add_run() 129 run5.font.name = \'方正舒体\' 130 run5.font.size = Pt(30) 131 run5.font.bold = True 132 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
完工。