4 ways to export Jupyter Notebook as PDF

Have you ever wanted to export your Jupyter Notebook to PDF file? The PDF is an abbreviation for Portable Document Format. It can be displayed on any operating system. That makes it format of choice for many who wants to share their results. In this post I will show you 4 different ways how to export Jupyter Notebook as PDF file.
1. Print Jupyter Notebook to PDF
The most straightforward way is just to use web browser feature of print to PDF. There is no need to install any additional packages.
The big advantage of this approach is that we don’t need to install additional libraries to make it works! However, it is manual approach — hard to automate. What is more, we can’t control the process of export (for example, we can’t hide code in the exported file).
2. Download Jupyter Notebook as PDF
The Jupyter Notebook has an option to export the notebook to many formats. It can be accessed by clicking File -> Download as -> PDF via LaTeX (or PDF via HTML — not visible in the screenshot).

This approach requires you to install some additional packages. For me, the option that exports with LaTeX is difficult. It requires you to install much more packages than option of export via HTML. If you don’t have required packages you will get the error message:
nbconvert failed: xelatex not found on PATH, if you have not installed xelatex you may need to do so. Find further instructions at https://nbconvert.readthedocs.io/en/latest/install.html#installing-tex.

This is scary, isn’t it? The option to export via HTML requires you to download Chromium (headless browser).
I rarely use this approach to be honest. It requires additional installation (that is not trivial) and is manual. This approach under the hood is using nbconvert tool.
3. Export to PDF with nbconvert
That’s one of my favourite approaches. Why? Because it is a command line tool that can be used in the scripts 🙂
Still you need to install additional packages to make it work. The same as in Jupyter Notebook GUI there are two options:
- export to PDF via LaTex,
- export to PDF via HTML.
The latter is my choice. It requires pyppeteer and Chromium to be download. This can be easily achieved by running:
pip install nbconvert[webpdf]
and adding a flag —allow-chromium-download when converting a notebook:
jupyter nbconvert --to webpdf --allow-chromium-download your-notebook-file.ipynb
The flag should be added only one time. It is not necessary after Chromium installation. The nbconvert has many optional arguments that control the export. For example, you can easily hide the code with —no-input flag:
jupyter nbconvert --to webpdf --no-input your-notebook-file.ipynb
Additionally, you can apply more options to the export like removing selected cells or change the templates.
4. Share Notebook with Mercury
There is an open-source framework Mercury that makes Python notebooks sharing painless. It converts notebooks to interactive documents (web apps, reports, slides, dashboards). You can share a notebook with interactive widgets. Your end-users can tweak widgets values and execute the notebook with new values (without changing the code). The Mercury allows to export the executed notebook into standalone HTML or PDF file. The end-user just need to clik the Download button.
Summary
Saving notebooks to PDF is a great way to persist results in a shareble format. PDFs can be easily published online or send in the email. There are several ways to convert Jupyter Notebook as PDF. The automatic conversion can be easily achieved with nbconvert tool. Notebooks shared with Mercury framework can be easily converted to PDF. The PDF notebook can be manually downloaded from the website.
Как и для чего экспортировать красивые отчеты из Jupyter Notebook в PDF
Если вы специалист по анализу данных и вам нужно представить отчет для заказчика, если вы ищете работу и не знаете, как оформить тестовое задание так, чтобы на вас обратили внимание, если у вас много учебных проектов, связанных с аналитикой и визуализацией данных, то сегодняшний пост будет вам очень и очень полезен. Дело в том, что смотреть на чужой код в Jupyter Notebook бывает проблематично, ведь результат часто теряется между множеством строк кода с подготовкой данных, импортом нужных библиотек и серией попыток реализовать ту или иную идею. Именно поэтому такой метод, как экспорт результатов в PDF-файл в формате LaTeX — это отличный вариант для итоговой визуализации, который сэкономит время и будет выглядеть презентабельно. В научных кругах статьи и отчеты очень часто оформляются именно с использованием LaTeX, поскольку он имеет ряд преимуществ:
- Математические уравнения и формулы выглядят аккуратнее.
- Библиография создается автоматически, на основе всех использованных в документе ссылок.
- Автор может сосредоточиться на содержании, а не на внешнем виде документа, так как верстка текста и других данных происходит автоматически с помощью указания необходимых параметров в коде.
Сегодня мы подробно расскажем о том, как научиться экспортировать вот такие красивые отчеты из Jupyter Notebook в PDF с использованием LaTeX.

Установка LaTeX
Самый важный момент в формировании отчета из Jupyter Notebook на Python — это его экспорт в финальный файл. Для этого применяется одна библиотека — nbconvert — которая конвертирует ваш ноутбук в любой удобный формат документа: pdf (как в нашем случае), html, latex или другой. Эту библиотеку нужно не просто установить, а провести некоторую процедуру по предустановке нескольких других пакетов: Pandoc, TeX и Chromium. По ссылке на библиотеку весь процесс описан очень подробно для каждого программного обеспечения, поэтому подробно мы на нем останавливаться не будем.
Как только вы завершили все предварительные шаги, нужно установить и импортировать библиотеку в ваш Jupyter Notebook.
!pip install nbconvert import nbconvert
Экспорт таблиц в Markdown формат
Обычно, таблицы не представляют в отчетах, поскольку их бывает трудно быстро прочесть, но иногда все-таки необходимо добавить небольшую таблицу в итоговый документ. Для того, чтобы таблица выглядела аккуратно, нужно представить ее в Markdown формате. Это можно сделать вручную, но если в таблице много данных, то лучше придумать более удобный метод. Мы предлагаем использовать следующую простую функцию pandas_df_to_markdown_table(), которая преобразует любой датафрейм в markdown-table. Единственный нюанс: после преобразования исчезают строчные индексы, потому, если они важны (как в нашем примере), то стоит записать их в переменную в первой колонке датафрейма.
data_g = px.data.gapminder() summary = round(data_g.describe(),2) summary.insert(0, 'metric', summary.index) # Функция для преобразования dataframe в Markdown Table def pandas_df_to_markdown_table(df): from IPython.display import Markdown, display fmt = ['---' for i in range(len(df.columns))] df_fmt = pd.DataFrame([fmt], columns=df.columns) df_formatted = pd.concat([df_fmt, df]) display(Markdown(df_formatted.to_csv(sep="|", index=False))) pandas_df_to_markdown_table(summary)
Экспорт изображения в отчет
В этом примере мы будем строить bubble-chart, про методику построения которых рассказывали в недавнем посте. В прошлый раз мы использовали пакет Seaborn, наглядно показывая, что отображение данных размером кругов на графике происходит корректно. Такие же графики можно построить и при помощи пакета Plotly.
Для того чтобы отобразить график, построенный в Plotly в отчете тоже нужно немного постараться. Дело в том, что plt.show() не поможет отобразить график при экспорте. Поэтому, нужно сохранить получившийся график в рабочей директории, а затем, используя библиотеку iPython.display, отобразить его с помощью функции Image().
from IPython.display import Image import plotly.express as px fig = px.scatter(data_g.query("year==2007"), x="gdpPercap", y="lifeExp", size="pop", color="continent", log_x=True, size_max=70) fig.write_image('figure_1.jpg') Image(data = 'figure_1.jpg', width = 1000)
Формирование и экспорт отчета
Когда все этапы анализа данных завершены, отчет можно экспортировать. Если вам нужны заголовки или текст в отчете, то пишите его в ячейках ноутбука, сменив формат Code на Markdown. Для экспорта можно использовать терминал, запуская там вторую строку без восклицательного знака, либо можно запустить код, написанный ниже, в ячейке ноутбука. Мы советуем не загружать отчет кодом, поэтому используем параметр TemplateExporter.exclude_input=True, чтобы ячейки с кодом не экспортировались. Также, при запуске этой ячейки код выдает стандартный поток (standard output) и, чтобы в отчете его не было видно, в начале ячейки нужно написать %%capture.
%%capture !jupyter nbconvert --to pdf --TemplateExporter.exclude_input=True ~/Desktop/VALIOTTI/Reports/Sample\LaTeX\ Report.ipynb !open ~/Desktop/VALIOTTI/Reports/Sample\ LaTeX\ Report.pdf
Если вы все сделали верно и методично, то в итоге получится вот такой отчет! Презентуйте данные красиво 🙂
Convert (Jupyter Notebook) to
Convert (Jupyter Notebook) documents to format, edit and optimize documents online and free.
Convert IPYNB to PDF
Loading Uploader.
if you have uploaded a file, it will be displayed.
Confirm Cancel
Tags:
Jupyter Notebook (.ipynb)
An IPYNB file (Interactive Python Notebook) is a notebook document created by Jupyter Notebook, an interactive environment for students and scientists to analyze data using Python language. IPYNB files are usually converted to PDF, HTML, DOCX, RTF, and LaTeX formats.
Portable Document Fomat (.pdf)
PDF stands for Portable Document Format. It is a versatile file format created by Adobe in 1992 to present and exchange documents independent of software, hardware, and operating systems. It is now an open standard maintained by the International Organization for Standardization (ISO). PDFs can contain links, buttons, form fields, audio, video, and business logic and can be signed electronically. They can easily be viewed using the free Adobe Acrobat Reader software.
Экспорт из ipynb в PDF с сохранением русского языка. Python nbconvert
из библиотеки nbconvert При экспорте не сохраняются символы русского алфавита. В итоге я должен был бы получить что-то такое:
А получаю это:
Подскажите пожалуйста, как избежать этого? MIKTeX скачан и русский язык там есть, Pandoc тоже.
Отслеживать
задан 19 апр 2020 в 16:44
Antivist Home Antivist Home
75 1 1 золотой знак 4 4 серебряных знака 11 11 бронзовых знаков
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Этому вопросу больше двух лет, но, возможно, ответ кому-то пригодится.
Jupyter использует xelatex для того, чтобы генерировать PDF из тетрадки. xelatex — это LaTeX, сделанный на основе XeTeX — версии TeX, в которой используется Unicode для кодировки символов, а не байтовые кодировки, как в оригинальном TeXе.
Встроенная поддержка Unicode — это хорошо, но нужны ещё шрифты, в которых есть кириллические буквы. К сожалению, стандартный формат xelatex использует шрифты, в которых нет нужных символов.
Для решения проблемы можно воспользоваться тем, что Jupyter генерирует TeX-файл из тетрадки ipynb, используя шаблон Jinja2, который хранится в файле index.tex.j2 . Место расположения этого файла и выбор шрифтов на замену зависит от окружения.
Linux + TeXLive
В Linux Jupyter ищет этот шаблон по списку директорий, первое место в котором занимает директория ~/.local/share/jupyter/nbconvert/templates/latex .
Хорошие шрифты для Linux — это шрифты семейства Droid.
В директорию с шаблонами нужно положить файл примерно такого содержания, который обеспечит подключение шрифтов Droid.
((=- Default to the notebook output style -=)) ((*- if not cell_style is defined -*)) ((* set cell_style = 'style_jupyter.tex.j2' *)) ((*- endif -*)) ((=- Inherit from the specified cell style. -=)) ((* extends cell_style *)) %=============================================================================== % Latex Article %=============================================================================== ((*- block docclass -*)) \documentclass[11pt] ((*- endblock docclass -*)) ((*- block packages -*)) ((( super() ))) \usepackage \usepackage \setdefaultlanguage \setotherlanguage \newfontfamily \newfontfamily \AtBeginDocument < \setmainfont\setsansfont \setmonofont > ((*- endblock packages -*))
После того, как в генерируемый TeX файл будут включены команды из бока packages , в PDF-файле будут отображаться кириллические буквы.

Windows + MikTex
%%% пока не готово
