zoukankan      html  css  js  c++  java
  • 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         

    完工。

  • 相关阅读:
    react 组件间通信,父子间通信
    微信公众号配置及微信jsAPI支付
    Vue 幸运大转盘
    Hystrix断路器配置属性解析
    使用熔断器仪表盘监控(hystrix)
    使用熔断器防止服务雪崩
    创建服务消费者(Feign)
    Spring Cloud Ribbon配置详解
    创建服务消费者(Ribbon)
    创建服务提供者
  • 原文地址:https://www.cnblogs.com/mafu/p/14029545.html
Copyright © 2011-2022 走看看