Модуль fpdf2
может генерировать как внутренние ссылки, на другие страницы в PDF-документе, так и ссылки на внешние URL-адреса, которые будут открываться в браузере.
Содержание:
FPDF.cell()
;FPDF.link()
;FPDF.add_link()
- создает якорь/внутреннюю ссылку;FPDF.set_link()
- добавляет якорь на элемент PDF-документа;FPDF.link()
- установить ссылку (якорь или URL) в PDF-документ;FPDF.write()
печатает текст с текущей позиции.FPDF.cell()
.Метод FPDF.cell()
делает кликабельным всю ячейку, а не только текст:
pdf = FPDF() # директория где лежат системные шрифты OS Linux font_dir = '/usr/share/fonts/truetype/freefont' # добавляем TTF-шрифт, поддерживающий кириллицу. pdf.add_font("Serif", style="", fname=f"{font_dir}/FreeSerif.ttf", uni=True) pdf.add_page() # устанавливаем шрифт по умолчанию pdf.set_font("Serif", size=15) text = 'Модуль fpdf2 в Python.' # вычисляем длину строки при размере шрифта 15 text_width = pdf.get_string_width(text) # выводим текст с ссылкой на ячейку pdf.cell(w=text_width, h=10, txt=text, border=1, align="C", link="https://docs-python.ru/packages/modul-fpdf2-python/") pdf.output("hyperlink.pdf")
FPDF.link()
.Метод FPDF.link()
является низкоуровневым и определяет прямоугольную интерактивную область.
Пример, показывающий, как разместить такую прямоугольную ссылку поверх текста:
from fpdf import FPDF pdf = FPDF() # директория где лежат системные шрифты OS Linux font_dir = '/usr/share/fonts/truetype/freefont' # добавляем TTF-шрифт, поддерживающий кириллицу. pdf.add_font("Serif", style="", fname=f"{font_dir}/FreeSerif.ttf", uni=True) pdf.add_page() # устанавливаем шрифт по умолчанию pdf.set_font("Serif", size=18) line_height = 10 text = "Текстовая ссылка" # выводим текст pdf.text(x=10, y=line_height, txt=text) # вычисляем длину строки при размере шрифта 18 width = pdf.get_string_width(text) # выводим ссылку поверх текста pdf.link(x=10, y=0, w=width, h=line_height, link="https://docs-python.ru/packages/modul-fpdf2-python/", alt_text="Модуль fpdf2") pdf.output("hyperlink.pdf")
Примечание: альтернативный текст внешней ссылки поддерживает только метод FPDF.link()
. Если, при наведении курсора на альтернативный текст, последний не появляется, значит используемый просмотрщик PDF не поддерживает эту функциональность.
FPDF.write_html()
.Альтернативный метод с использованием объекта HTMLMixin
и метода FPDF.write_html()
. Гиперссылки, определенные таким образом, будут отображаться синим цветом с подчеркиванием.
from fpdf import FPDF, HTMLMixin class PDF(FPDF, HTMLMixin): pass pdf = PDF() # директория где лежат системные шрифты OS Linux font_dir = '/usr/share/fonts/truetype/freefont' # добавляем TTF-шрифт, поддерживающий кириллицу. pdf.add_font("Serif", style="", fname=f"{font_dir}/FreeSerif.ttf", uni=True) pdf.set_font("Serif", size=15) pdf.add_page() pdf.write_html('<a href="https://docs-python.ru/packages/modul-fpdf2-python/">Модуль fpdf2</a>') pdf.output("hyperlink.pdf")
Для проставления внутреннего якоря/ссылки в PDF-документе можно использовать методы FPDF.cell()
и FPDF.link()
аналогичным образом с проставлением внешних ссылок. Отличие состоит в создании внутренних ссылок. Метод FPDF.write_html()
не позволяет определять внутренние ссылки.
Создание внутренних ссылок происходит методами FPDF.add_link()
и FPDF.set_link()
.
Смотрите пример внутренней ссылки с методом FPDF.cell()
:
from fpdf import FPDF pdf = FPDF() # директория где лежат системные шрифты OS Linux font_dir = '/usr/share/fonts/truetype/freefont' # добавляем TTF-шрифт, поддерживающий кириллицу. pdf.add_font("Serif", style="", fname=f"{font_dir}/FreeSerif.ttf", uni=True) pdf.set_font("Serif", size=15) pdf.add_page() pdf.cell(w=pdf.epw, txt="Добро пожаловать на первую страницу!", align="C") pdf.add_page() # создание якоря link = pdf.add_link() # добавление якоря на первую страницу pdf.set_link(link, page=1) # аргумент `link=link` добавляет ссылку на созданный якорь pdf.cell(txt="Внутренняя ссылка на первую страницу", border=1, link=link) pdf.output("internal_link.pdf")
FPDF.add_link()
:Метод FPDF.add_link()
создает новую внутреннюю ссылку/якорь и возвращает ее идентификатор. Внутренняя ссылка - это интерактивная область, которая ведет в другое место документа.
Затем идентификатор может быть передан в методы FPDF.cell()
, FPDF.write()
, FPDF.image()
или FPDF.link()
в качестве аргумента link
. Место назначения созданной внутренней ссылки должно быть определено с помощью метода FPDF.set_link()
.
Смотрите пример в разделе "Ссылки/якоря на внутренние элементы PDF-документа".
FPDF.set_link(link, y=0, x=0, page=-1, zoom='null')
:Метод FPDF.set_link()
определяет страницу page
и положение на странице y
и x
, на которую указывает индификатор якоря link
.
Принимаемые аргументы:
link
: - int
, идентификатор внутренней ссылки/якоря, возвращаемый FPDF.add_link()
.y=0
: необязательная ордината целевой позиции якоря. Значение по умолчанию: 0 (вверху страницы).x=0
: необязательная абсцисса целевой позиции якоря. Значение по умолчанию: 0 (вверху страницы).page=-1
: необязательный номер целевой страницы. по умолчанию: -1, указывает текущую страницу.zoom
: int
, дополнительный новый уровень масштабирования после перехода по ссылке якоря. В настоящее время приложение Sumatra PDF Reader игнорируется, но отслеживается Adobe Acrobat reader.Смотрите пример в разделе "Ссылки/якоря на внутренние элементы PDF-документа".
FPDF.link(x, y, w, h, link, alt_text=None)
:Метод FPDF.link()
помещает ссылку link
и ее аннотацию alt_text
в прямоугольную область страницы обозначенной координатами x
и y
и имеющую ширину w
и высоту h
.
Текстовые ссылки или ссылки с изображений (как внутренние ссылки, так и URL-ссылки) обычно устанавливаются через аргумент link
методов FPDF.cell()
, FPDF.write()
или FPDF.image()
.
Этот метод может быть полезен, например, для определения области внутри изображения для установки ссылки.
Принимаемые аргументы:
x
: float
, горизонтальное положение (слева) в левой части прямоугольника;y
: float, вертикальное положение (сверху) до нижней стороны прямоугольника;w
: float
, ширина прямоугольника ссылки;h
: float
, высота прямоугольника ссылки;link
: либо URL-адрес, либо целое число, возвращаемое FPDF.add_link()
, определяющее внутреннюю ссылку/якорь на страницу;alt_text
: float
, необязательное текстовое описание ссылки.FPDF.write(h=None, txt='', link='')
:Метод FPDF.write()
печатает текст с текущей позиции. Когда достигается правое поле листа или встречается символ новой строки '\n'
, то происходит разрыв строки, и текст продолжает выводится с левого поля страницы. При выходе из метода текущая позиция перемещается в конец текста.
h=None
: int
, высота строки. Значение по умолчанию: None
, что означает использование текущего размера шрифта;txt
: выводимый текстlink
: необязательная ссылка для добавления в текст, внешний URL или внутренний идентификатор, возвращаемый FPDF.add_link()
.