网络编程
位置:首页>> 网络编程>> Python编程>> 详解python-docx处理Word必备工具

详解python-docx处理Word必备工具

作者:站着活  发布时间:2023-10-03 03:15:08 

标签:python,docx,word

我的理解

为什么会用到python-docx,因为近段时间下载了大量网文,但格式都是html的,我个人习惯使用word处理文字,于是就想法设法把html文档转换为word,首先要考虑的问题就是从html中提取的文字怎么存word里呢,之前用了pandoc直接转换,带转换后的效果太不理想,没什么格式,不符合我这种对word格式有严格要求强迫症人的需要,于是就到处搜寻其他方法,终于功夫不负有心人,通过几天研究python-docx,感觉很适合我,就一边分析html文档,一边思考怎么用python-docx存想要的格式word,因为我的word排版,一般习惯 页面要设置成5678页边距的,大小A4的,正文主标题 方正小标宋,其他标题要么黑体,要么加粗,正文要首行缩进2字符 仿宋_GB2312,页脚要加页码显示,大概这些样式。

python-docx 创建一篇文档也差不多是这么个思路,一篇文档也就是Document()对象 首先要分成不同的节,也就是由sections对象控制,然后每节中又分成不同的段落paragraphs对象,每段又由不同的块run对象组成,针对不同的节(section)可以设置页面的一些属性,针对不同的段落(paragraph),可以设置间距和缩进、换行和分页等,针对不同块(run)可以设置字体的字型、颜色、大小等。可以先设置好整篇文章的大致段落、字体等格式,然后针对不同段落和块可以单独再进行设置。

我主要讲讲自己用到的几个内容是怎么设置的。

安装库:


pip install python-docx

用到的库


from docx import Document(文档读写)
from docx.shared import Pt,Cm,Inches (字体大小,不一定全用到)
from docx.oxml.ns import qn(设置字体格式,分栏等用到)
from docx.shared import RGBColor (设置字体颜色)
from docx.enum.text import WD_ALIGN_PARAGRAPH (设置对其方式)
from docx.enum.section import WD_ORIENTATION (纸张方向用到)

设置大致格式

这样设置完了之后有一个好处就是,后往里面写入文档的时候回自动按这个格式,如果有需要改动的再单独写入时改。


docment = docx.Document(docx_tamplate) # 读取模板文档,这里可以不用模板文档,因为python-docx没法设置页码,所以我先建了一个有页码的空白文档作为模板文档
# 设置正文默认格式
# 字体大小三号字(16)
docment.styles['Normal'].font.size = Pt(16)
# 字体仿宋_GB2312
docment.styles['Normal'].font.name = u'仿宋_GB2312'
docment.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'仿宋_GB2312')
# 行间距 28磅 段前、段后不留空
docment.styles['Normal'].paragraph_format.line_spacing = Pt(29)
docment.styles['Normal'].paragraph_format.space_before = Pt(0)
docment.styles['Normal'].paragraph_format.space_after = Pt(0)
# 首行缩进2字符
docment.styles['Normal'].paragraph_format.first_line_indent = 406400
# 关闭孤行控制
docment.styles['Normal'].paragraph_format.widow_control = False
# 设置页面大小
docment.sections[0].page_height = Cm(29.7)  # 设置A4纸的高度
docment.sections[0].page_width = Cm(21)  # 设置A4纸的宽
# 设置页边距
docment.sections[0].top_margin = Cm(3.7)
docment.sections[0].bottom_margin = Cm(3.4)
docment.sections[0].left_margin = Cm(2.8)
docment.sections[0].right_margin = Cm(2.6)

单独设置段格式


doc=Document() #创建一个空白文档
p1=doc.add_paragraph()  #初始化建立一个自然段
p1.alignment=WD_ALIGN_PARAGRAPH.CENTER  #对齐方式为居中,没有这句话默认左对齐。另外右对齐:RIGHT,两端对齐:JUSTIFY,分散对齐:DISTRIBUTE

p1.paragraph_format.line_spacing=1.5  #设置该段落,行间距为1.5倍,也可以像上面设默认值那样用Pt单位来设置
p1.paragraph_format.first_line_indent=Inches(0.5)  #段落缩进0.5英寸,我还是习惯设置2字符 值为:406400
p1.paragraph_format.left_line_indent=Inches(0.5)  #设置左缩进0.5英寸。一般用不到
p1.paragraph_format.right_line_indent=Inches(0.5)  #设置右缩进0.5英寸,一般用不到
p1.paragraph_format.keep_together = False  # 段前分页
p1.paragraph_format.keep_with_next = False  # 与下段同页
p1.paragraph_format.page_break_before = True  # 段中不分页
p1.paragraph_format.widow_control = False  # 孤行控制
p1.space_after=Pt(5)  #设置段后距离为5磅
p1.space_before=Pt(5)  #设置段前距离为5磅

run1=p1.add_run('你好')   #写入段落的中的文本“你好”
run1.font.size=Pt(12)  #单独设置字体大小为24
run1.font.bold=True  #样式设置加粗
run1.italic=True  #字形设置斜体
run1.font.underline = True  # 下划线
run1.font.color.rgb = RGBColor(255, 0, 0)  # 颜色

插入图片


#添加图片,设置图片大小
doc.add_picture(r"图片路径", width=Cm(10))

插入表格


tab = doc.add_table(rows=5, cols=8, style='Table Grid') # 创建一个5行8列的表格,样式为Table Grid
tab.cell(0, 0).text = '表角'  # 0行0列的内容为表角
cell=tab.cell(0, 1).merge(tab.cell(0, 3)) # 合并0行1列到0行3列
p = cell.paragraphs[0]
run = p.add_run(‘合并') #在单元格内容创建一个段落,并写入‘合并'文本
run.font.size = Pt(10.5)  # 字体大小设置,和word里面的字号相对应5号字
run.bold = True
p.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER  # 设置为加粗 居中显示

来源:https://www.cnblogs.com/wenshi-jj/p/15389090.html

0
投稿

猜你喜欢

  • 超酷的js图片轮换/轮播 渐变效果··来自腾讯刚刚在腾讯女性频道上看到一个很酷的图片渐变轮换效果·····于是乎····抠下来了···分享·
  • 清除浮动一个凡是做页面的人都会遇到的一个东西,但是是否大家都能够清楚的知道,全方位的了解呢?于是一闲下来了马上写了这样的一篇文章,不能讲面面
  • 我在一篇文章所说,首页的“站点名称”最好用h1标签来定义,但从美观考虑,要用logo图片来代替h1,这时需要隐藏h1内的这段文字,但又不能对
  • 1.为什么要跨平台编程?双平台编程或多平台编程,只是为提供更好开发更兼容的解决方案的一种手段,编程时服务于产品和客户的,也是因地制宜。先安装
  • javascript/js的ajax的GET请求代码如下所示:<script type="text/javascript&q
  • 闭包是Python装饰器的基础。要理解闭包,先要了解Python中的变量作用域规则。变量作用域规则首先,在函数中是能访问全局变量的:>
  • 踩了很多坑,记录一下这次试验,本次测试环境:Linux centos7 64位。pyenv是一个python版本管理工具,它能够进行全局的p
  • 面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行。为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过
  • 本文实例讲述了MySQL 的启动选项和系统变量。分享给大家供大家参考,具体如下:MySQL的配置信息可以通过两种方式实现,一种是命令行形式,
  • 本文实例讲述了JS实现跟随鼠标闪烁转动色块的方法。分享给大家供大家参考。具体实现方法如下:<html><head>&
  • 在Python中,很多对象都是可以通过for语句来直接遍历的,例如list、string、dict等等,这些对象都可以被称为可迭代对象。至于
  • Requests是用Python编写,基于urllib,采用Apache2 Licensed开源协议的HTTP库。它比urllib更方便,可
  •   表单在网页中主要负责数据采集功能。一个表单有三个基本组成部分: 表单标签:这里面包含了处理表单数据所用CGI程序的URL以及数
  • JavaScript 循环中,i++ 与 i– 那个比较快?相信有不少朋友看过相关的讨论文章,比如这篇。文章解释了开启优化选项后,i– 的
  • 在平时开发中我们经常会用到 Webpack这个时下最流行的前端打包工具。它打包开发代码,输出能在各种浏览器运行的代码,提升了开发至发布过程的
  • easy_install 和 pip的介绍:easy_install和pip都是用来下载安装Python一个公共资源库PyPI 的相关资源包
  • XSL(EXtensible Stylesheet Language)它是指可扩展样式表语言。 XSL之于 XML 就像 CSS 之于 HT
  •  在WEB2.0 网页充斥的年代,身边无时无刻都听到这样的声音:“拒绝海报式设计,要做有用的设计,要简洁,要清爽,要大气”产品经理
  • 最近刚接触了公司的服务器,使用的是Windows 2003 server + IIS 6.0 服务器,在使用无组件上传文件时产生这个错误时:
  • 关于SQL server2005中插入汉字变成问号的解决办法 1.右击你所建的数据库,点击“属性”,选择“选项”并点击。将其中的排序规则设置
手机版 网络编程 asp之家 www.aspxhome.com