Как пронумеровать страницы python-docx

Собственно, сам вопрос: Как пронумеровать страницы в нижнем колонтитуле при помощи python-docx?

Почитал про sections И смог задать общий для всех страниц колонтитул. Но как это сделать для каждой страницы? Чтобы у 1 страницы был номер 1, у второй 2 и тд


Ответы (1 шт):

Автор решения: Serg Bocharov

Максимально упростил код, дальше надеюсь сами разберетесь:

from docx import Document
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from docx.oxml import OxmlElement, ns


def create_element(name):
    return OxmlElement(name)


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


def add_page_number(paragraph):
    # выравниваем параграф по центру
    paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
    # запускаем динамическое обновление параграфа
    page_num_run = paragraph.add_run()
    # обозначаем начало позиции вывода
    fldChar1 = create_element('w:fldChar')
    create_attribute(fldChar1, 'w:fldCharType', 'begin')
    # задаем вывод текущего значения страницы PAGE (всего страниц NUMPAGES)
    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')
    # добавляем все в наш параграф (который формируется динамически)
    page_num_run._r.append(fldChar1)
    page_num_run._r.append(instrText)
    page_num_run._r.append(fldChar2)


doc = Document() 
add_page_number(doc.sections[0].footer.paragraphs[0])
doc.save("your_doc.docx")
→ Ссылка