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
完工。
Python将word文档批量转PDF的更多相关文章
- Python将word文档转换成PDF文件
如题. 代码: ''' #將word文档转换为pdf文件 #用到的库是pywin32 #思路上是调用了windows和office功能 ''' #导入所需库 from win32com.client ...
- Python之word文档替换字符串(也可以用于短模板套用)
Python之word文档替换字符串(也可以用于短模板套用),代码如下: 1 ''' 2 #word模板套用1:创建模板,适合比较短的文档 3 ''' 4 5 #导入所需库 6 from docx i ...
- 利用Python操作Word文档【图片】
利用Python操作Word文档
- 用java将简单的word文档换成pdf文档
用java将简单的word文档换成pdf文档的方式很多,因为很多都没有实际测试过,所以这里就先泛泛的说一下 整体上来看分两种: 1.纯java代码实现,有很多优秀的开源软件可以用,比如poi,itex ...
- Python之word文档模板套用 - 真正的模板格式套用
Python之word文档模板套用: 1 ''' 2 #word模板套用2:套用模板 3 ''' 4 5 #导入所需库 6 from docx import Document 7 ''' 8 #另存w ...
- Python读取word文档内容
1,利用python读取纯文字的word文档,读取段落和段落里的文字. 先读取段落,代码如下: 1 ''' 2 #利用python读取word文档,先读取段落 3 ''' 4 #导入所需库 5 fro ...
- python 使用win32com实现对word文档批量替换页眉页脚
最近由于工作需要,需要将70个word文件的页眉页脚全部进行修改,在想到这个无聊/重复/没有任何技术含量的工作时,我的内心是相当奔溃的.就在我接近奔溃的时候我突然想到完全可以用python脚本来实现这 ...
- Java利用aspose-words将word文档转换成pdf(破解 无水印)
首先下载aspose-words-15.8.0-jdk16.jar包 http://pan.baidu.com/s/1nvbJwnv 引入jar包,编写Java代码 package doc; impo ...
- 2018-10-04 [日常]用Python读取word文档中的表格并比较
最近想对某些word文档(docx)的表格内容作比较, 于是找了一下相关工具. 参考Automate the Boring Stuff with Python中的word部分, 试用了python-d ...
随机推荐
- java基础:CompletionStage接口
CompletionStage是Java8新增接口,用于异步执行中的阶段处理:先看接口 可以简单划分为三类: 1.在上一阶段执行结束之后,一阶段结果作为指定函数的参数执行函数产生新的结果,apply/ ...
- docker私有云管理平台-----shipyard
下载所需docker镜像 docker pull rethinkdb docker pull microbox/etcd docker pull shipyard/docker-proxy docke ...
- Thrift接口简介
参考地址:http://roclinux.cn/?p=3316 [thrift是什么] 计算机技术里一款著名的通信框架 – thrift框架 thrift的全名叫做Apache thrift,是一款软 ...
- P1163 银行贷款
考虑从一个月转移到下一个月.假设前一个月的欠款是 \(s\),月利息为 \(d\),月末还款为 \(b\),那么下一个月的欠款就是 \(s\left(1+d\right)-b\). 很容易看出月利息越 ...
- J - Sushi 题解(期望dp)
题目链接 题目大意 给你n个盘子,每个盘子可能有1,2,3个披萨 你选到每个盘子的概率是一样的. 你如果选到空的盘子什么都不做 如果你选到有披萨的盘子则吃掉一个披萨 求吃完所有披萨的期望 题目思路 设 ...
- MIT-6.004计算结构(2019年春)
L01: Introduction 略 L02: RISC-V Assembly 1.计算机处理器主要有三部分组成:内存.寄存器.算数逻辑单元 算数逻辑单元与寄存器通信,寄存器与内存通信,而算术逻辑单 ...
- windows服务器下tomcat 8.0 配置远程调试
在tomcat的bin目录下, 添加debug.txt文件, 然后输入: set JPDA_ADDRESS=9901set JPDA_TRANSPORT=dt_socketset CATALINA_O ...
- 安装rose遇到的问题
将rose文件夹里面的rose.rar直接解压到rose安装目录里面的common文件夹中 安装教程与问题解决连接https://blog.csdn.net/Farewell_w/article/de ...
- 第15.8节 PyQt入门学习:Designer的界面功能介绍
进入Qt Designer以后,打开或新建一个ui文件,Qt Designer窗口展示的页面如下图所示: 老猿将界面各部分使用红色数字进行标记,按照数字顺序各区域对应功能分别为: 1.界面元素控件区域 ...
- 2016 piapiapia 数组绕过
0x00.感悟 写完这道题,我感觉到了扫源码的重要性.暑假复现的那些CVE,有的就是任意文件读取,有的是任意命令执行,这些应该都是通过代码审计,得到的漏洞.也就和我们的CTF差不多了. ...