Добавление нумерации страниц в 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 можно быстро добавить русскую нумерацию страниц в массовом режиме, поддерживая три варианта выравнивания.
Основная последовательность действий:
Загрузка исходного PDF-документа
Инициализация шрифта и полей нумерации
Формирование текстового шаблона на русском языке
Перебор страниц и расчет координат для размещения текста
Сохранение готового документа
Данный способ отличается высокой скоростью работы и универсальностью, подходит для документов любого объёма.
UNIR
UNiR (User Network Information Resource - "пользовательский сетевой информационный ресурс") - любой содержащий какую-либо информацию какого-либо пользователя ресурс в интернете или интранете. Это может быть блог на сайте, страница в соцсети, страница мессенджере, страница в почтовом сервисе, канал на видеохостинге, страница на хостинге картинок, дисковое пространство в "облако", темы на форумах и так далее. Чтобы пользователь мог управлять своим UNiR, он должен войти в него и для ввести свои авторизационные данные, например, логин и пароль. Авторизационные создаются в процессе регистрации. UNiR позволяет пользователю распространять свою информацию, делиться ей с кеми-то другими и безопасно хранить её.
Одна страница
Всего одна в день. Вроде просто. Что такое одна страница? Это примерно одна книга в год. Мало? А сейчас сколько книг за год читаешь?
Одна страница в день – глупость! Надо бы побольше. И начинаешь побольше, но надолго не хватает.
Одна страница, но постоянно. Не страшно, что пропустил сегодня. Завтра прочитаю две. Опять пропустил? Тогда три. И вот уже так много, что предпочитаешь забыть, чем что-то читать.
Одна страница, один шаг, одно упражнение, одна минута, одно мгновение. Это так мало и так много.
Но я всё равно в тебя верю! Давай! Не получится самостоятельно, сможем вместе! Перестань жалеть себя! Это не то, где надо это делать! Я надеюсь на тебя! Очень-очень!
Приключения русалки
Нарисована на бумаге, оцифрована в цифре, продана как НФТ-токен, участница он-лайн игры, нанесена на шоппер, фото с шоппером по приколу отправлено на конкурс, и заняло какое-то место в категории Сюрреализм.
Некоторые мои картинки живут интересней, чем я







