前面有一篇<Python批量创建word文档(2)- 加图片和表格>的文章,利用这篇文章创建的word文档来批量转PDF文档。代码:

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

完工。

Python将word文档批量转PDF的更多相关文章

  1. Python将word文档转换成PDF文件

    如题. 代码: ''' #將word文档转换为pdf文件 #用到的库是pywin32 #思路上是调用了windows和office功能 ''' #导入所需库 from win32com.client ...

  2. Python之word文档替换字符串(也可以用于短模板套用)

    Python之word文档替换字符串(也可以用于短模板套用),代码如下: 1 ''' 2 #word模板套用1:创建模板,适合比较短的文档 3 ''' 4 5 #导入所需库 6 from docx i ...

  3. 利用Python操作Word文档【图片】

    利用Python操作Word文档

  4. 用java将简单的word文档换成pdf文档

    用java将简单的word文档换成pdf文档的方式很多,因为很多都没有实际测试过,所以这里就先泛泛的说一下 整体上来看分两种: 1.纯java代码实现,有很多优秀的开源软件可以用,比如poi,itex ...

  5. Python之word文档模板套用 - 真正的模板格式套用

    Python之word文档模板套用: 1 ''' 2 #word模板套用2:套用模板 3 ''' 4 5 #导入所需库 6 from docx import Document 7 ''' 8 #另存w ...

  6. Python读取word文档内容

    1,利用python读取纯文字的word文档,读取段落和段落里的文字. 先读取段落,代码如下: 1 ''' 2 #利用python读取word文档,先读取段落 3 ''' 4 #导入所需库 5 fro ...

  7. python 使用win32com实现对word文档批量替换页眉页脚

    最近由于工作需要,需要将70个word文件的页眉页脚全部进行修改,在想到这个无聊/重复/没有任何技术含量的工作时,我的内心是相当奔溃的.就在我接近奔溃的时候我突然想到完全可以用python脚本来实现这 ...

  8. Java利用aspose-words将word文档转换成pdf(破解 无水印)

    首先下载aspose-words-15.8.0-jdk16.jar包 http://pan.baidu.com/s/1nvbJwnv 引入jar包,编写Java代码 package doc; impo ...

  9. 2018-10-04 [日常]用Python读取word文档中的表格并比较

    最近想对某些word文档(docx)的表格内容作比较, 于是找了一下相关工具. 参考Automate the Boring Stuff with Python中的word部分, 试用了python-d ...

随机推荐

  1. java基础:CompletionStage接口

    CompletionStage是Java8新增接口,用于异步执行中的阶段处理:先看接口 可以简单划分为三类: 1.在上一阶段执行结束之后,一阶段结果作为指定函数的参数执行函数产生新的结果,apply/ ...

  2. docker私有云管理平台-----shipyard

    下载所需docker镜像 docker pull rethinkdb docker pull microbox/etcd docker pull shipyard/docker-proxy docke ...

  3. Thrift接口简介

    参考地址:http://roclinux.cn/?p=3316 [thrift是什么] 计算机技术里一款著名的通信框架 – thrift框架 thrift的全名叫做Apache thrift,是一款软 ...

  4. P1163 银行贷款

    考虑从一个月转移到下一个月.假设前一个月的欠款是 \(s\),月利息为 \(d\),月末还款为 \(b\),那么下一个月的欠款就是 \(s\left(1+d\right)-b\). 很容易看出月利息越 ...

  5. J - Sushi 题解(期望dp)

    题目链接 题目大意 给你n个盘子,每个盘子可能有1,2,3个披萨 你选到每个盘子的概率是一样的. 你如果选到空的盘子什么都不做 如果你选到有披萨的盘子则吃掉一个披萨 求吃完所有披萨的期望 题目思路 设 ...

  6. MIT-6.004计算结构(2019年春)

    L01: Introduction 略 L02: RISC-V Assembly 1.计算机处理器主要有三部分组成:内存.寄存器.算数逻辑单元 算数逻辑单元与寄存器通信,寄存器与内存通信,而算术逻辑单 ...

  7. windows服务器下tomcat 8.0 配置远程调试

    在tomcat的bin目录下, 添加debug.txt文件, 然后输入: set JPDA_ADDRESS=9901set JPDA_TRANSPORT=dt_socketset CATALINA_O ...

  8. 安装rose遇到的问题

    将rose文件夹里面的rose.rar直接解压到rose安装目录里面的common文件夹中 安装教程与问题解决连接https://blog.csdn.net/Farewell_w/article/de ...

  9. 第15.8节 PyQt入门学习:Designer的界面功能介绍

    进入Qt Designer以后,打开或新建一个ui文件,Qt Designer窗口展示的页面如下图所示: 老猿将界面各部分使用红色数字进行标记,按照数字顺序各区域对应功能分别为: 1.界面元素控件区域 ...

  10. 2016 piapiapia 数组绕过

    0x00.感悟      写完这道题,我感觉到了扫源码的重要性.暑假复现的那些CVE,有的就是任意文件读取,有的是任意命令执行,这些应该都是通过代码审计,得到的漏洞.也就和我们的CTF差不多了.    ...