Python将word文档批量转PDF
前面有一篇<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
完工。