python-docx 页面设置详解
作者:站着活 发布时间:2021-12-06 03:42:02
初识word文档-节-的概念
编辑一篇word文档,往往首先从页面设置开始,从下图可以看出,页面设置常操作的有页边距、纸张方向、纸张大小4个,而在word中是以节(section)来分大的块,每一节的页面设置可以不同。所以在python-docx中也是一样,当前节的各项属性全部保存在当前的section中,要想设置当前节的页面就从了解section的各个属性应用开始吧。
如果用python-docx新建一个空白文档,那么默认是只有一个节
>>> import docx
>>> doc = docx.Document()
>>> len(doc.sections)
1
,如果要增加节可以用doc.add_section()来完成。
>>> import docx
>>> doc = docx.Document()
>>> len(doc.sections)
1
>>> doc.add_section()
<docx.section.Section object at 0x000001F27F85E370>
>>> len(doc.sections)
2
了解了节之后我们开始来对节的页面进行设置。
设置页边距
在python-docx包中常用页边距属性存在section的以下4个属性中:
section.top_margin
:上页边距
section.bottom_margin
:下页边距
section.left_margin
:左页边距
section.right_margin
:右页边距
页边距的值以厘米(cm)为单位,让我们来看看刚才第二节的默认的页边距是多少
>>> print('上',doc.sections[1].top_margin.cm,'下',doc.sections[1].bottom_margin.cm,'左',doc.sections[1].left_margin.cm,'右',doc.sections[1].right_margin.cm)
上 2.54 下 2.54 左 3.175 右 3.175
注,这里的sections[1]是第二节。
下面把页边距设置成我们公文常用的5678页面距
>>> from docx.shared import Cm
>>> doc.sections[1].top_margin = Cm(3.7)
>>> doc.sections[1].bottom_margin = Cm(3.5)
>>> doc.sections[1].left_margin = Cm(2.8)
>>> doc.sections[1].right_margin = Cm(2.6)
这里要先导入docx中定义单位的Cm,后面常用的单位还有Pt 也是这个块导入。
另外 页边距属性还有3个不常用的就是装订线,页眉、页脚边距分别为:section.gutter,section.header_distance, section.footer_distance
,设置方法同上,不再赘述。需要说明的是装订线还有一个位置属性,暂时未发现如何设置,默认为左,如果需求设置成右,可以建个模板docx文档导入。
设置纸张方向和大小
Section中的三个属性描述了页面方向和尺寸。分别为:section.orientation, section.page_width, section.page_height
纸张大小设置单位我习惯用cm,设置同页边距。
这里要特别说下orientation,即纸张方向,也是要设置的,不能说你把纸张宽度设置宽了,高度设置低了纸张就变成横向了,会影响打印等。
纸张方向的值是docx.enum.section.WD_ORIENTATION中枚举类型的2常量来设置的。分别为:
WD_ORIENTATION.LANDSCAPE
:纸张方向为横向。
WD_ORIENTATION.PORTRAIT
:纸张方向为纵向。
先查看下:
>>> doc.sections[0].page_height.cm
27.94
>>> doc.sections[0].page_width.cm
21.59
>>> doc.sections[0].orientation
0
默认的是信纸大小,横向
设置成我们常用的A4纸大小下:
from docx.shared import Cm
from docx.enum.section import WD_ORIENTATION
doc.sections[0].page_height = Cm(29.7) # 设置A4纸的高度
doc.sections[0].page_width = Cm(21) # 设置A4纸的宽
doc.sections[0].orientation = WD_ORIENTATION.PORTRAIT # 设置纸张方向为横向,可以不设置 默认为横向
doc.sections[1].page_height = Cm(21) # 设置A4纸的高度
doc.sections[1].page_width = Cm(29.7) # 设置A4纸的宽
doc.sections[1].orientation = WD_ORIENTATION.LANDSCAPE # 设置纸张方向为纵向
设置分栏
有些时候我们还要在某些节中分栏,给节设置分栏的语句比较固定,就是更改section的一个私有属性。先导入docx.oxml.ns.qn,然后一句话搞定
from docx.oxml.ns import qn
doc.sections[1]._sectPr.xpath('./w:cols')[0].set(qn('w:num'), '2') #把第二节设置为2栏
想设置成几栏 把‘2'就改成几。
来源:https://www.cnblogs.com/wenshi-jj/p/15388808.html


猜你喜欢
- PyAutoGUI是一个Python语言的键鼠自动化库,简单来说和按键精灵的功能一样。但是因为是Python的类库,所以可以使用Python
- 前些日子有网友问:将ASP纪录集输出成n列的的表格形式显示的方法?现在写了一个,方便大家使用。'定义变量 Dim cn,r
- 1.0tensorflow的安装1.1安装pythonpython下载 需要python3.x<=3.7https://www.pyt
- javascript的分号代表语句的结束符,但由于javascript具有分号自动插入规则,所以它是一个十分容易让人模糊的东西,在一般情况下
- 本文实例讲述了PHP简单预防sql注入的方法。分享给大家供大家参考,具体如下:出现sql注入一般都是因为语法不规范不严谨造成的,问题出现在s
- 原来的语句是这样的: select sum(sl0000) from xstfxps2 where dhao00 in ( select d
- <% dim result,result1 str="ad_asp之家_nzlkjlkfjoj
- 有的时候,我们为了保持网页的美观,需要将较长的文字在一定长度时截断。比如我们希望在列表中显示文章标题的前15个字,那么一个这样的标题:“rs
- GetObject 函数返回对文件中 Automation 对象的引用。GetObject([pathname] [, class])参数P
- 二元函数为y=x1^2+x2^2,x∈[-5,5]NIND=121; %初始种群的个数(Number of individual
- 1、 开始->设置->控制面板->管理工具->服务 停止所有Oracle服务。 2、 开始->程序->Oracle - OraHome81-
- 通过界面设计上是能手工操作的,无法达到我批量修改几千台服务器。 因为此了一个脚本来批量执行。 环境:redgate + mssql 2008
- 要随机生成字符串代码如下:在MySQL中定义一个随机串的方法,然后再SQL语句中调用此方法。随机串函数定义方法:CREATE DEFINER
- 查询效率分析:子查询为确保消除重复值,必须为外部查询的每个结果都处理嵌套查询。在这种情况下可以考虑用联接查询来取代。如果要用子查询,那就用E
- 本文实例为大家分享了python实现登录与注册系统的具体代码,供大家参考,具体内容如下实现功能1.调用文本文件里的用户信息2.可以将注册信息
- 本文实例为大家分享了python tkinter实现学生信息管理系统的具体代码,供大家参考,具体内容如下初学python,代码写的比较繁杂,
- 本文实例讲述了python读取json文件并将数据插入到mongodb的方法。分享给大家供大家参考。具体实现方法如下:#coding=utf
- (代码片断试验成功,成功上传!) 因为昨天想起来学习一下PHP代码的冲动,是来源于像模仿着做一个类似公司IMAGE LIBRARY的东西出来
- 问题描述在电脑中重新安装Anaconda3&PyCharm后,运行原来的程序画图时出现了下图界面。不能弹出如下图所示的“figure”窗口。
- 本文实例讲解了Python中除法使用的注意事项,是非常重要的技巧,对于Python程序设计来说有很好的借鉴价值。具体分析如下:现来看如下示例