3

Добавление нумерации страниц в PDF через Python (подробное руководство)

При работе с контрактами, отчетами, научными работами и техническими документами PDF добавление нумерации страниц является обязательной функцией. Традиционные инструменты для редактирования PDF часто имеют сложную настройку разметки. С помощью библиотеки Free Spire.PDF for Python на языке Python можно легко прописать код и разместить нумерацию страниц в нижнем колонтитуле PDF файла по центру, слева или справа.

В данном руководстве рассказывается, как при помощи мощной библиотеки Spire.PDF for Python автоматически добавить русскую нумерацию страниц в PDF-документы. Представлены готовые варианты кода для трех вариантов выравнивания, которые можно использовать под любые задачи.

I. Подготовка к работе

Сначала установите библиотеку Free Spire.PDF for Python:

pip install spire.pdf.free

После установки импортируйте необходимые модули в код проекта:python

from spire.pdf.common import * from spire.pdf import *

II. Разбор основных компонентов

Перед написанием кода разберем назначение ключевых классов библиотеки:

Проще говоря: PdfPageNumberField и PdfPageCountField являются переменными с числовыми значениями, а PdfCompositeField формирует итоговый текст по заданному шаблону.

III. Готовый код (нумерация по центру)

Ниже представлен полный код для добавления русской нумерации страниц по центру с подробными комментариями:

from spire.pdf.common import *

from spire.pdf import *

# Загрузка PDF-документа

doc = PdfDocument()

doc.LoadFromFile("Input.pdf")

# Установка шрифта Times New Roman (поддержка кириллицы)

font = PdfTrueTypeFont("Times New Roman", 12.0, PdfFontStyle.Regular, True)

brush = PdfBrushes.get_Black()

pen = PdfPen(brush, 1.0)

# Инициализация полей номера и общего количества страниц

pageNumberField = PdfPageNumberField()

pageCountField = PdfPageCountField()

# Шаблон русской нумерации страниц

compositeField = PdfCompositeField(

font,

brush,

"Страница {0} из {1}",

[pageNumberField, pageCountField]

)

# Задание отступов (единица измерения: пункты)

leftMargin = 54.0

rightMargin = 54.0

bottomMargin = 72.0

# Добавление нумерации на все страницы

for i in range(doc.Pages.Count):

page = doc.Pages.get_Item(i)

pageSize = page.Size

# Отрисовка разделительной линии

lineY = pageSize.Height - bottomMargin + 15.0

page.Canvas.DrawLine(pen, leftMargin, lineY, pageSize.Width - rightMargin, lineY)

# Определение размера текста для корректного выравнивания

pageNumberSize = font.MeasureString(f"Страница {i + 1} из {doc.Pages.Count}")

# Координаты расположения нумерации по центру

compositeField.Location = PointF(

(pageSize.Width - pageNumberSize.Width) / 2,

pageSize.Height - bottomMargin + 18.0

)

# Отрисовка нумерации на странице

compositeField.Draw(page.Canvas, 0.0, 0.0)

# Сохранение готового файла и закрытие ресурсов

doc.SaveToFile("Output.pdf")

doc.Dispose()

IV. Реализация выравнивания слева и справа

Для смены положения достаточно изменить координату X в параметре compositeField.Location.

4.1 Выравнивание по левому краю

# Координата X равна левому отступу

compositeField.Location = PointF(

leftMargin,

pageSize.Height - bottomMargin + 18.0

)

Результат: надпись «Страница 1 из 10» отображается в левом нижнем углу страницы.

4.2 Выравнивание по правому краю

# Расчет координаты для расположения в правой части

compositeField.Location = PointF(

pageSize.Width - pageNumberSize.Width - rightMargin,

pageSize.Height - bottomMargin + 18.0

)

Результат: надпись «Страница 1 из 10» отображается в правом нижнем углу страницы.

V. Разные варианты оформления русской нумерации

Помимо стандартного варианта «Страница X из Y» можно использовать другие форматы:

5.1 Компактный вариант

compositeField = PdfCompositeField(

font, brush, "{0} / {1}",

[pageNumberField, pageCountField]

)

# Отображение: 1 / 10

5.2 Вариант с декоративными знаками

compositeField = PdfCompositeField(

font, brush, "- {0} / {1} -",

[pageNumberField, pageCountField]

)

# Отображение: - 1 / 10 -

5.3 Только номер страницы (без общего количества)

compositeField = PdfCompositeField(

font, brush, "{0}",

[pageNumberField]

)

# Отображение: 1

VI. Рекомендуемые шрифты для кириллицы

Пример установки шрифта:

font = PdfTrueTypeFont("Arial", 12.0, PdfFontStyle.Regular, True)

VII. Настройка рабочих параметров

7.1 Изменение отступов

Корректируйте значения для изменения расположения нумерации:

leftMargin = 54.0 # Увеличение смещает текст вправо

rightMargin = 54.0 # Увеличение смещает текст влево

bottomMargin = 72.0 # Увеличение смещает нумерацию выше, уменьшение – ниже

7.2 Корректировка вертикального положения

# Положение разделительной линии

lineY = pageSize.Height - bottomMargin + 15.0

# Положение текста нумерации

compositeField.Location = PointF(x, pageSize.Height - bottomMargin + 18.0)

Увеличение числовых значений опускает элементы вниз, уменьшение – поднимает вверх.

7.3 Изменение размера шрифта

# Установка размера шрифта 14 пунктов

font = PdfTrueTypeFont("Times New Roman", 14.0, PdfFontStyle.Regular, True)

После смены размера система автоматически пересчитывает габариты текста и подстраивает расположение.

VIII. Решение распространенных проблем

Вопрос 1: Кириллические символы отображаются некорректно

Ответ: Используйте шрифты с полной поддержкой кириллицы (Times New Roman, Arial, PT Sans).

Вопрос 2: Нумерация отображается в верхнем колонтитуле

Ответ: Проверьте формулу расчета координаты Y, чем выше значение, тем ближе элемент к нижнему краю страницы.

Вопрос 3: Нумерация перекрывается основным текстом документа

Ответ: Увеличьте значение bottomMargin, чтобы выделить свободное место в нижней части страницы.

Вопрос 4: Пропустить нумерацию для титульного листа

Ответ: Измените начало цикла, чтобы нумерация начиналась со второй страницы:

for i in range(1, doc.Pages.Count):

Вопрос 5: Добавить нумерацию только на определенные страницы

Ответ: Добавьте условие проверки в цикл перебора страниц:

for i in range(doc.Pages.Count):

if 2 <= i <= 10:

# Код добавления нумерации

IX. Итог

С помощью библиотеки Free Spire.PDF for Python можно быстро добавить русскую нумерацию страниц в массовом режиме, поддерживая три варианта выравнивания.

Основная последовательность действий:

  1. Загрузка исходного PDF-документа

  2. Инициализация шрифта и полей нумерации

  3. Формирование текстового шаблона на русском языке

  4. Перебор страниц и расчет координат для размещения текста

  5. Сохранение готового документа

Данный способ отличается высокой скоростью работы и универсальностью, подходит для документов любого объёма.

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества