python-docx 页面设置详解

作者:站着活 时间:2021-12-06 03:42:02 

初识word文档-节-的概念

编辑一篇word文档,往往首先从页面设置开始,从下图可以看出,页面设置常操作的有页边距、纸张方向、纸张大小4个,而在word中是以节(section)来分大的块,每一节的页面设置可以不同。所以在python-docx中也是一样,当前节的各项属性全部保存在当前的section中,要想设置当前节的页面就从了解section的各个属性应用开始吧。

python-docx 页面设置详解

如果用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

标签:python,docx,页面设置
0
投稿

猜你喜欢

  • 详解Python中的null是什么

    2022-11-30 15:33:56
  • 如何用python爬取微博热搜数据并保存

    2021-10-21 14:13:38
  • python闭包和装饰器你了解吗

    2022-01-11 00:46:02
  • Python实现强制复制粘贴的示例详解

    2021-03-30 23:58:43
  • python 如何在测试中使用 Mock

    2022-01-08 07:41:09
  • Python进行区间取值案例讲解

    2021-10-23 15:17:34
  • IE window对象介绍

    2008-05-21 18:47:00
  • Python中的np.argmin()和np.argmax()函数用法

    2021-09-10 16:00:51
  • 用 iframe 解决下拉框与层之冲突

    2008-04-28 12:24:00
  • css样式表滤镜全接触

    2007-10-26 12:48:00
  • python 返回一个列表中第二大的数方法

    2022-06-01 00:17:47
  • Django读取Mysql数据并显示在前端的实例

    2023-11-09 17:36:49
  • 浅谈PHP中常用的3种设计模式

    2023-10-18 06:23:02
  • 纯CSS3文字渐变内发光投影效果

    2011-08-24 20:15:10
  • sql server对字段的添加修改删除、以及字段的说明

    2012-01-05 18:50:52
  • 淘宝搜索框研究报告

    2010-07-27 12:49:00
  • python实习总结(yeild,async,azwait和协程)

    2021-06-16 20:40:45
  • SQL优化基础 使用索引(一个小例子)

    2012-01-29 18:29:26
  • Google的YSlow——Page Speed(附插件下载)

    2009-09-27 12:40:00
  • PHP入门基础之注释的写法

    2023-10-20 07:26:17
  • asp之家 网络编程 m.aspxhome.com