Преобразование markdown в pdf на Python

18941fdebd194b028cf014f90a56806a.jpg

Каждому, кто ходил извилистой тропкой автоматической генерации pdf из markdown файлов ведомы связанные с этой задачей пеньки решения: Pandoc, LaTex, wkhtmltopdf и т.п.

Хочу поделиться с сообществом новым (по крайней мере для меня) вариантом решения этой задачи в Python.

Этот вариант имеет следующие плюсы.

  • Все зависимости в requrments.txt, никаких внешних бинарников

  • Нет проблем с кириллицей, картинками и наиболее популярными элементами разметки.

  • Возможность использования разных размеров страниц внутри одного pdf.

  • Настраиваемый режим создания оглавления (bookmarks).

Данный способ основан на использовании библиотек markdown-it-py (md → html) и PyMuPDF (html → pdf). Связывает их между собой маленький класс Python.

Ставим:

pip install markdown-pdf

Создаем pdf с оглавлением (bookmarks) из заголовков до 2 уровня.

from markdown_pdf import MarkdownPdf

pdf = MarkdownPdf(toc_level=2)

Добавляем в pdf три секции markdown. Каждая секция начинается с новой страницы. Заголовки из первой секции не включаем в оглавление.

from markdown_pdf import Section

pdf.add_section(Section("# Title\n", toc=False))
pdf.add_section(Section("# Head1\n\nbody\n"))
pdf.add_section(Section("## Head2\n\n### Head3\n\n"))

Устанавливаем свойства pdf документа.

pdf.meta["title"] = "Руководство пользователя"
pdf.meta["author"] = "А.C.Пушкин"

Сохраняем в файл.

pdf.save("guide.pdf")

Благодарю за внимание.

© Habrahabr.ru