Публикация PDF в Sphinx с помощью rst2pdf

Генератор документации Sphinx позволяет получить документацию в разных форматах. Самый популярный после HTML — это, пожалуй, PDF.

В официальной документации Sphinx для получения PDF рекомендуется использовать в качестве промежуточного шага LaTeX, и это, вероятно, самый лучший способ, который дает максимальный контроль над результатом. Но если вам не нужен максимальный контроль и не хочется тратить время на установку и настройку инструментария публикации через LaTeX, вы можете использовать способ менее гибкий, зато более простой: получение PDF с помощью расширения rst2pdf.

В этой статье описаны самые базовые настройки и действия, которые необходимы, чтобы получить русскоязычный PDF-документ в Sphinx через rst2pdf. За более детальной информацией обращайтесь к документации rst2pdf (https://rst2pdf.org/static/manual.pdf).

Имейте в виду, что, согласно документации, rst2pdf — расширение экспериментальное, так что будьте готовы к тому, что не все будет работать так, как хотелось бы.

Предварительные условия

В этой статье я предполагаю следующее:

Установка расширения rst2pdf в Sphinx

rst2pdf не является частью Sphinx по умолчанию, это расширение, которое нужно установить дополнительно.

Установите rst2pdf с помощью следующей команды:

pip install rst2pdf

Теперь расширение готово к работе.

Настройка шрифтов для русскоязычных документов

Для корректной публикации русскоязычных документов нужно создать файл JSON и указать в нем параметр fontsAlias со списком шрифтов, которые вы будете использовать в документации. Подробнее о настройке шрифтов читайте в документации rst2pdf.

Ниже приведен пример простейшего файла JSON.

{"fontsAlias": {"stdFont": "Arial",
                "stdBold": "Arial-Bold",
                "stdItalic": "Arial-Italic",
                "stdBoldItalic": "Arial-BoldItalic" }
}

Созданный файл рекомендуется поместить в папку _static вашего проекта Sphinx.

Параметры PDF в conf.py

Внесите в файл conf.py вашего проекта следующие параметры:

  • В extensions добавьте элемент rst2pdf.pdfbuilder.

  • Добавьте секцию с параметрами PDF в конец файла. Не забудьте добавить pdf_stylesheets и указать в нем имя файла JSON с параметрами шрифтов (см. предыдущий раздел).

В примере ниже приведены фрагменты файла conf.py с некоторыми параметрами публикации PDF — это те параметры, которые используются при публикации этой статьи в формат PDF. Полный список параметров вы найдете в документации rst2pdf.

# -- General configuration ------

extensions = ['rst2pdf.pdfbuilder']
# -- Options for PDF output -----

pdf_documents = [('index', 'rst2pdf-in-sphinx', '', '')]
pdf_language = "ru_RU"
pdf_stylesheets = ['styles.json']
pdf_style_path = ['_static']
pdf_use_coverpage = False
pdf_use_toc = False

В этом примере третий и четвертый элементы кортежа в pdf_documents (заголовок документа и имя автора) — пустые строки. Причина в том, что PDF-документ публикуется без обложки (параметр pdf_use_coverpage установлен в False). Заголовок документа и имя автора используются только на обложке, поэтому в данном случае они не нужны.

Публикация PDF

Запустите sphinx-builder:

sphinx-build -b pdf -a . _build/pdf

Итоговый документ публикуется в папку _build/pdf вашего проекта Sphinx.

Полезные ссылки

Документация rst2pdf: https://rst2pdf.org/static/manual.pdf

Документация Sphinx: https://www.sphinx-doc.org/en/master/contents.html