- Руководство¶
- Руководство 2 — Верхний колонтитул, нижний колонтитул, разрыв страницы и картинка¶
- Руководство 3 — Переносы строк и цвета¶
- Руководство 4 — Несколько колонок¶
- Руковдство 5 — Создание таблиц¶
- Руководство 6 — Создание ссылок и смешивание стилей текста¶
- Создание PDF при помощи PyFPDF и Python
- Установка
- Базовое использование
- Работа со шрифтами
Руководство¶
После подключения библиотеки мы создаем объект FPDF . Здесь используется конструктор FPDF со значениями по умолчанию: страницы формата A4 портретные, единица измерения — миллиметр.
Можно установить PDF в альбомном режиме ( L ) или использовать другой формат страниц (например, Letter или Legal ) и единицы измерения ( pt , cm , in ).
На данный момент страницы нет, поэтому мы должны добавить ее с помощью команды add_page. Начало страницы находится в левом верхнем углу, а текущая позиция по умолчанию располагается на расстоянии 1 см от границ; поля можно изменить с помощью команды set_margins.
Прежде чем мы сможем напечатать текст, обязательно нужно выбрать шрифт с помощью set_font, иначе документ будет недействительным. Мы выбираем Helvetica bold 16:
Мы можем указать курсив с помощью I , подчеркнутый шрифт с помощью U или обычный шрифт с помощью пустой строки (или использовать любую комбинацию). Обратите внимание, что размер шрифта задается в пунктах, а не в миллиметрах (или другой единице измерений); это единственное исключение. Другие встроенные шрифты: Times , Courier , Symbol и ZapfDingbats .
Теперь мы можем распечатать ячейку с помощью cell. Ячейка — это прямоугольная область, возможно, обрамленная рамкой, которая содержит некоторый текст. Она отображается в текущей позиции. Мы указываем ее размеры, текст (центрированный или выровненный), должны ли быть нарисованы рамки, и куда текущая позиция перемещается после нее (вправо, вниз или в начало следующей строки). Чтобы добавить рамку, мы сделаем следующее:
Чтобы добавить новую ячейку с центрированным текстом и перейти к следующей строке, мы сделаем следующее:
Примечание: разрыв строки также можно сделать с помощью ln. Этот метод позволяет дополнительно указать высоту разрыва.
Наконец, документ закрывается и сохраняется по указанному пути к файлу с помощью функции output. Без указания параметров output() возвращает буфер PDF bytearray .
Руководство 2 — Верхний колонтитул, нижний колонтитул, разрыв страницы и картинка¶
Пример двух страниц с верхним и нижним колонтитулами и логотипом:
В этом примере используются методы header и footer для обработки заголовков и колонтитулов страницы. Они вызываются автоматически. Они уже существуют в классе FPDF, но ничего не делают, поэтому мы должны расширить класс и переопределить их.
Логотип печатается методом image с указанием его левого верхнего угла и ширины. Высота вычисляется автоматически, чтобы соблюсти пропорции изображения.
Для печати номера страницы в качестве ширины ячейки передается нулевое значение. Это означает, что ячейка должна простираться до правого поля страницы; это удобно для центрирования текста. Номер текущей страницы возвращается методом page_no; что касается общего количества страниц, то оно получается с помощью специального значения , которое будет подставлено при закрытии документа. Обратите внимание на использование метода set_y, который позволяет установить позицию в абсолютном месте страницы, начиная сверху или снизу.
Здесь используется еще одна интересная функция: автоматический разрыв страницы. Как только ячейка пересекает границу страницы (по умолчанию 2 сантиметра от низа), происходит разрыв и шрифт восстанавливается. Хотя верхний и нижний колонтитулы выбирают свой собственный шрифт ( helvetica ), основная часть продолжает использовать Times . Этот механизм автоматического восстановления также применяется к цветам и ширине линий. Предел, который вызывает разрыв страницы, можно установить с помощью set_auto_page_break.
Руководство 3 — Переносы строк и цвета¶
Продолжим с примера, который печатает выровненные абзацы. Он также иллюстрирует использование цветов.
Метод get_string_width позволяет определить длину строки в текущем шрифте, которая используется здесь для расчета положения и ширины рамки, окружающей заголовок. Затем устанавливаются цвета (через set_draw_color, set_fill_color и set_text_color), а толщина линии устанавливается в 1 мм (против 0,2 по умолчанию) с помощью set_line_width. Наконец, мы выводим ячейку (последний параметр True указывает на то, что фон должен быть заполнен).
Для печати абзацев используется метод multi_cell. Каждый раз, когда строка достигает правого края ячейки или встречается символ возврата каретки, выдается разрыв строки и автоматически создается новая ячейка под текущей. По умолчанию текст выравнивается по ширине.
Определены два свойства документа: заголовок (set_title) и автор (set_author). Свойства можно просматривать двумя способами. Первый — открыть документ непосредственно с помощью Acrobat Reader, перейти в меню Файл и выбрать пункт Свойства документа. Второй, также доступный из плагина, — щелкнуть правой кнопкой мыши и выбрать пункт Свойства документа.
Руководство 4 — Несколько колонок¶
Этот пример является вариантом предыдущего и показывает, как расположить текст в нескольких колонках.
Ключевым отличием от предыдущего урока является использование методов accept_page_break и set_col.
С помощью метода accept_page_break, в тот момент, когда ячейка пересекает нижнюю границу страницы, проверяется номер текущей колонки. Если он меньше 2 (мы решили разделить страницу на три колонки), то будет вызван метод set_col, увеличивающий номер колонки и изменяющий положение следующей колонки, чтобы текст мог быть продолжен в ней.
Как только будет достигнута нижняя граница третьей колонки, метод accept_page_break произведет сброс и возврат к первой колонке и инициирует разрыв страницы.
Руковдство 5 — Создание таблиц¶
⚠️ This section has changed a lot and requires a new translation: https://github.com/PyFPDF/fpdf2/issues/267
Руководство 6 — Создание ссылок и смешивание стилей текста¶
В этом уроке будет рассказано о нескольких способах вставки ссылок внутри pdf документа, а также о добавлении ссылок на внешние источники.
Также будет показано несколько способов использования различных стилей текста (жирный, курсив, подчеркивание) в одном и том же тексте.
Новый метод, показанный здесь для печати текста — это write(). Он очень похож на multi_cell(), основные отличия заключаются в следующем:
- Конец строки находится на правом поле, а следующая строка начинается на левом поле.
- Текущая позиция перемещается в конец текста.
Таким образом, этот метод позволяет нам написать фрагмент текста, изменить стиль шрифта и продолжить с того самого места, на котором мы остановились. С другой стороны, его главный недостаток заключается в том, что мы не можем выровнять текст, как это делается при использовании метода multi_cell().
На первой странице примера мы использовали для этой цели write(). Начало предложения написано текстом обычного стиля, затем, используя метод set_font(), мы переключились на подчеркивание и закончили предложение.
Для добавления внутренней ссылки, указывающей на вторую страницу, мы использовали метод add_link(), который создает кликабельную область, названную нами «link», которая ведет в другое место внутри документа.
Чтобы создать внешнюю ссылку с помощью изображения, мы использовали метод image(). Этот метод имеет возможность передать ссылку в качестве одного из аргументов. Ссылка может быть как внутренней, так и внешней.
В качестве альтернативы для изменения стиля шрифта и добавления ссылок можно использовать метод write_html() . Это парсер html, который позволяет добавлять текст, изменять стиль шрифта и добавлять ссылки с помощью html.
Создание PDF при помощи PyFPDF и Python
ReportLab – это основной инструмент, который я использую для создания PDF с нуля. Однако, я заметил, что есть еще один — PyFPDF или FPDF для Python. Пакет PyFPDF – это порт «бесплатного» пакета PDF, который написан на PHP. Релиза этого проекта не было несколько лет, однако есть движения в его репозитории на Github, так что работа над проектом ведется. Пакет PyFPDF поддерживает Python 2.7 и Pyhton 3.4+.
Есть вопросы по Python?
На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!
Telegram Чат & Канал
Вступите в наш дружный чат по Python и начните общение с единомышленниками! Станьте частью большого сообщества!
Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!
В данной статье не будет утомительных разборов пакета PyFPDF. Однако, мы раскроем более чем исчерпывающую информацию для эффективного использования. Обратите внимание на то, что существует небольшая книжечка «Python и PDF: pyFPDF» от Эдвуда Оказио на Leanpub, если вы захотите узнать больше о библиотеке, сверх той информации, которая указана в данной статье или документации пакета.
Установка
Установка PyFPDF – это просто, так как он подразумевает работу с pip. Установка проходит следующим образом:
На момент написания, эта команда устанавливала версию 1.7.2 на Python 3.6 без каких-либо проблем. Во время установки вы увидите, что этот пакет не имеет зависимостей, что приятно.
Базовое использование
Теперь, когда у вас есть установленный PyFPDF, попробуем использовать его для создания простого файла PDF. Откройте ваш редактор Python и создайте новый файл под названием **simple_demo.py**. После этого, введите следующий код:
Первый элемент, который нам нужно обсудить, это импорт. Здесь мы импортируем класс FPDF из пакета fpdf. Настройки по умолчанию этого класса создают PDF в режиме Portrait, используя миллиметры в качестве единицы измерения и размер страницы А4. Если вы хотите быть четче, вы можете вписать следующую строку установки:
Я не фанат использования буквы «P», чтобы указать классу, какая это ориентация. Вы можете использовать «L», если предпочитаете пейзаж вместо портрета.
Пакет PyFPDF поддерживает supports ‘pt’, ‘cm’ и ‘in’ в качестве альтернативных единиц измерения. Если обратиться к источнику, вы увидите, что пакет PyFPDF поддерживает только следующие размеры страниц:
Это выглядит немного ограниченно, в сравнении с ReportLab, где у вас в распоряжении несколько дополнительных размеров поддерживаемых изначально, кроме этого, вы можете указать собственный размер страницы, если вам это нужно.
В любом случае, следующий шаг – это создание страницы при помощи метода add_page. Далее, мы указываем шрифт при помощи метода set_font. Вы увидите, что мы передаем родительское наименование шрифта и размер, которые нам нужны. Вы также можете настроить стиль шрифта при помощи аргумента style. Если вы хотите сделать это, помните, что для этого нужна строка, такая как «В» для жирного шрифта, или «Bl» для полужирного.
Далее, мы создаем клетку, шириной 200 миллиметров и 10 миллиметров в высоту. Клетка, по большому счету, плавающая, и содержит текст, к ней можно подключить границы. Она разделяется автоматически, если включен автоматический разрыв страницы, так что клетка перейдет за границу страницы. Параметр txt – это текст, который вам нужно ввести в PDF. Параметр In указывает PyFPDF, что нужно добавить разрыв строки, если он указан как 1, что мы и делаем в нашей статье. Наконец, мы можем установить выравнивание текста по ширине (по умолчания), или по центру («С»). Здесь мы выбираем второй вариант.
Наконец, мы сохраняем документ на диск, вызывая метод output с путем к файлу, который мы хотим сохранить.
После запуска кода, мой PDF выглядит следующим образом:
Давайте попробуем узнать побольше о работе PyFPDF со шрифтами.
Работа со шрифтами
PyFPDF содержит набор базовых шрифтов, старательно прописанных в класс FPDF: