Каждому, кто ходил извилистой тропкой автоматической генерации 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")
Благодарю за внимание.