Python docx添加文档页码

文章讲述了在Python的docx库中处理文档时如何为每页添加页码,介绍了两种方法:直接在模板上输入或使用lxml底层API。作者选择后者并提供了详细代码示例,展示了如何通过创建OxmlElement和设置instrText实现页码功能。
摘要由CSDN通过智能技术生成


前言

在使用python的docx库去处理文档内容时,发现需要去对每页添加页码,但是在网上找了好久的资料也几乎没有翻到什么有用的办法,很多都是AI灌水。

通过查找docx库的官方文档后,发现他们虽然给了页眉页脚的使用指南,但是没有提及怎么去加页码,截止到2023年11月,他们依旧没做相关的API接口,于是只能我们另外想其他的办法去解决这个问题。

解决方法

在翻阅很久的资料后,发现有很多的国外相关学习的人士也提出了这样的问题,他们给了两种解决思路。

第一种是直接在已经建立好的文档模板上面进行输入文字,这样就不需要考虑额外添加页码的问题了。

第二种是深入docx类型的更底层,lxml,通过字段的方式设置页码。

因为采用docx库以后肯定不想再去动手设置个模板,因此本人更加倾向于第二种的解决方法,虽然代码量长了一些。(希望官方早点把API接口给完善一下啊喂!)

代码

from docx import Document
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.oxml import OxmlElement
from docx.oxml.ns import qn


def create_element(name):
    return OxmlElement(name)


def create_attribute(element, name, value):
    element.set(qn(name), value)


def add_page_number(run):
    fldChar1 = create_element('w:fldChar')
    create_attribute(fldChar1, 'w:fldCharType', 'begin')

    instrText = create_element('w:instrText')
    create_attribute(instrText, 'xml:space', 'preserve')
    instrText.text = "PAGE"

    fldChar2 = create_element('w:fldChar')
    create_attribute(fldChar2, 'w:fldCharType', 'end')

    run._r.append(fldChar1)
    run._r.append(instrText)
    run._r.append(fldChar2)


doc = Document()
for i in range(50):
    paragraph1 = doc.add_paragraph("这里是文字")

add_page_number(doc.sections[0].footer.paragraphs[0].add_run())
doc.sections[0].footer.paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTER
doc.save("mydoc.docx")


代码说明

实现的方法是把该节内的文档信息提取出来,直接将它的page字段作为页码写入页脚,也就是上述中的instrText,最后将页码设置成居中的方式,这样就可以在docx库中添加页码了。

页码的字体可以用docx的nomal方式进行改变。

如果需要在页眉加页码,方式也是同理,至于需要其他格式的页码,相信也不需要笔者多言了。

效果如下:
在这里插入图片描述

在这里插入图片描述

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值