Как конвертировать записные книжки IPython в PDF и HTML?


89

Я хочу преобразовать свои ipython-ноутбуки для печати или просто отправить в формате html. Я заметил, что для этого уже существует инструмент nbconvert . Хотя я его загрузил, я не знаю, как преобразовать записную книжку с помощью nbconvert2.py, поскольку nbconvert говорит, что он устарел. nbconvert2.py говорит, что мне нужен профиль для преобразования записной книжки, что это? Есть ли документация по этому инструменту?


Ответы:


96

Если у вас установлен LaTeX, вы можете загрузить его в формате PDF прямо из записной книжки Jupyter, выбрав Файл -> Загрузить как -> PDF через LaTeX (.pdf) . В противном случае выполните эти два шага.

  1. Для вывода HTML теперь вы должны использовать Jupyter вместо IPython и выбрать Файл -> Загрузить как -> HTML (.html) или выполнить следующую команду:

    jupyter nbconvert --to html notebook.ipynb  
    

    Это преобразует файл документа Jupyter notebook.ipynb в выходной формат html.

    Google Colaboratory - это бесплатная среда для ноутбуков Jupyter от Google, которая не требует настройки и полностью работает в облаке. Если вы используете Google Colab, команды такие же, но Google Colab позволяет загружать только форматы .ipynb или .py.

  2. Преобразуйте html-файл notebook.html в файл pdf с именем notebook.pdf. В Windows, Mac или Linux установите wkhtmltopdf . wkhtmltopdf - это утилита командной строки для преобразования html в pdf с помощью WebKit. Вы можете загрузить wkhtmltopdf со связанной веб-страницы или во многих дистрибутивах Linux его можно найти в их репозиториях.

    wkhtmltopdf notebook.html notebook.pdf   
    

Исходная (теперь почти устаревшая) версия: преобразование файла записной книжки IPython в HTML.

ipython nbconvert --to html notebook.ipynb


1
Все свернулось на одну страницу -__-
хтафоя 02

2
Для вывода HTML вы должны теперь использовать jupyterвместо, ipythonнапример,jupyter nbconvert --to html notebook.ipynb
AlexG

Чтобы это работало, необходимо установить jupyter_contrib_nbextensions .
CharlesG

Согласно приведенному выше ответу вам нужен wkhtmltopdf. Чтобы установить его в ubuntu 14.04, это сработало для меня gist.github.com/brunogaspar/bd89079245923c04be6b0f92af431c10
Прадип Сингх

3
Вы также можете распечатать веб-сайт в формате pdf.
AndiCover,

17

Из документов :

Если вы хотите предоставить другим пользователям статическое представление вашей записной книжки в формате HTML или PDF, используйте кнопку «Печать». Это открывает статическое представление документа, которое вы можете распечатать в формате PDF с помощью средств вашей операционной системы или сохранить в файл с помощью параметра «Сохранить» в веб-браузере (обратите внимание, что обычно при этом создаются и файл html, и каталог с именем notebook_name_files рядом с ним, который содержит всю необходимую информацию о стилях, поэтому, если вы собираетесь поделиться этим, вы должны отправить каталог вместе с основным файлом html).


1
Спасибо! Версия HTML действительно хороша, и ее действительно легко получить. Однако PDF не очень хорош, графики разрезаются на две части, если они находятся между двумя страницами, и длинная строка кода также разрезается.
nunzio13n

@ nunzio13n - Ну, по крайней мере, у вас есть html ... Я не использовал, nbconvrtпоэтому не могу вам помочь. Надеюсь, кто-нибудь из тех, кто есть ...
root

3
Мертвая ссылка. Кроме того, в моем блокноте нет кнопки печати.
Пэт

Использование печати в браузере с помощью CTRL+ Pработает.
Леви Багули

13

nbconvert еще не полностью заменен на nbconvert2, вы все еще можете использовать его, если хотите, иначе мы бы удалили исполняемый файл. Это просто предупреждение, что мы больше не исправляем nbconvert1.

Следующее должно работать:

./nbconvert.py --format=pdf yourfile.ipynb 

Если вы используете достаточно свежую версию IPython, не используйте представление печати, просто используйте обычный диалог печати. График, вырезанный в хроме, является известной проблемой (Chrome не уважает некоторые print css) и работает намного лучше с firefox, но не со всеми версиями.

Что касается nbconvert2, он по-прежнему требует написания документации и разработки.

Nbviewer использует nbconvert2, так что с HTML неплохо.

Список текущих доступных профилей:

$ ls -l1 profile|cut -d. -f1

base_html
blogger_html
full_html
latex_base
latex_sphinx_base
latex_sphinx_howto
latex_sphinx_manual
markdown
python
reveal
rst

Дайте вам существующие профили. (Вы можете создать свой собственный, см. Будущий документ, он ./nbconvert2.py --help-allдолжен дать вам возможность использовать в своем профиле.)

тогда

$ ./nbconvert2.py [profilename] --no-stdout --write=True <yourfile.ipynb>

И он должен записывать ваши (tex) файлы, пока извлеченные цифры в cwd. Да, я знаю, что это не очевидно, и, вероятно, это не изменится, поэтому нет документа ...

Причина в том, что nbconvert2 в основном будет библиотекой python, где в псевдокоде вы можете:

 MyConverter = NBConverter(config=config)
 ipynb = read(ipynb_file)
 converted_files = MyConverter.convert(ipynb)
 for file in converted_files :
     write(file)

Точка входа наступит позже, когда API стабилизируется.

Я просто укажу , что @jdfreder (профиль github) работает над экспортом tex / pdf / sphinx и является экспертом по созданию PDF из файла ipynb на момент написания этой статьи.


Спасибо, вы прояснили еще несколько моих сомнений. Но все же nbconvert2.py не работает, потому что ему нужен даже файл конфигурации. [NbconvertApp] Config file for profile './profile/latex_base.nbcv' not found, giving upNbconvert не дает мне напрямую файл pdf, а файл латекса, и мне нужно обработать файл * .tex с помощью pdflatex, но это хорошее решение.
nunzio13n

Можете ли вы открыть вопрос на github, и мы разберемся с этим.
Мэтт

Вероятно, это не проблема nbconvert, но это связано с тем, что я не знаю о. Возможно, когда выйдет документация, все станет ясно, ipython с ноутбуком и nbconvert - очень хорошая работа, и я уверен, что скоро она появится.
nunzio13n

Кажется, что это теряет / не дает никакой нумерации ipython (надеялся, что он будет преобразован с использованием директивы ipython).
Энди Хайден

Есть ли версия API, чтобы это произошло? Я вижу, что есть, IPython.nbconvert.exporters.latexи мне интересно, есть ли способ получить из этого PDF-файл без инструмента командной строки. Кроме того, каковы зависимости, чтобы заставить его работать? (pandoc, tetex, другие вещи?) И я предполагаю, что это не кроссплатформенный (не работает в Windows). TIA!
IanSR

11

Также передайте --executeфлаг, чтобы получить результат

jupyter nbconvert --execute --to html notebook.ipynb
jupyter nbconvert --execute --to pdf notebook.ipynb

Лучше всего хранить выходные данные вне записной книжки для контроля версий, см .: Использование записных книжек IPython под контролем версий.

Но тогда, если вы не пройдете --execute, выходные данные не будут представлены в HTML, см. Также: Как запустить .ipynb Jupyter Notebook с терминала?

Для фрагмента HTML без заголовка: как экспортировать записную книжку IPython в HTML для публикации в блоге?

Проверено в Jupyter 4.4.0.


9

Для тех, кто не может установить wkhtmltopdf в свои системы, есть еще один метод, отличный от многих, уже упомянутых в ответах на этот вопрос, - просто загрузить файл в виде html-файла из записной книжки jupyter, загрузить его в HTML в PDF и загрузить преобразованные файлы pdf оттуда.

Здесь у вас есть записная книжка IPython (.ipynb), преобразованная в форматы PDF (.pdf) и HTML (.html).



4

Только этот ответ будет вам полезен, если в вашем документе есть математические, научные формулы. Даже если у вас их нет, все работает нормально.

GUI способ

  • откройте блокнот jupyter откройте блокнот jupyter
  • Перейдите в Файлы> Загрузить как> HTML или PDF через LaTeX. Перейдите в Файлы> Загрузить как> HTML или PDF через LaTeX.

  • Затем проверьте папку загрузок для файла. PS: Если у LaTeX были ошибки при компиляции PDF, он завершится ошибкой. В этом случае загрузите файл HTML, а затем используйте http://webpagetopdf.com/ или любую другую аналогичную службу для преобразования HTML в PDF.

Командная строка

  • Откройте терминал
  • Перейдите в папку, содержащую блокнот jupyter.
  • введите "jupyter nbconvert --to pdf your_jupyter_notebook.ipynb" PS: Если это не удается, попробуйте ответ Йогеша

4

Если вы используете облачную версию sagemath , вы можете просто перейти в левый угол,
выбрать Файл → Загрузить как → Pdf через LaTeX (.pdf).
Проверьте снимок экрана, если хотите.
Снимок экрана Преобразование ipynb в pdf

Если это не работает по какой-либо причине, вы можете попробовать другой способ.
выберите Файл → Предварительный просмотр, затем в окне предварительного просмотра
щелкните правой кнопкой мыши → Печать, а затем выберите «Сохранить как pdf».


3

Я пока не могу заставить pdf работать. Документы подразумевают, что я смогу заставить его работать с латексом, поэтому, возможно, мой латекс не работает. http://ipython.org/ipython-doc/rel-1.0.0/interactive/nbconvert.html $ ipython --version 1.1.0 $ ipython nbconvert --to latex --post PDF myfile.ipynb [NbConvertApp] ... raise child_exception OSError: [Errno 2] No such file or directory $ ipython nbconvert --to pdf myfile.ipynb [NbConvertApp] CRITICAL | Bad config encountered during initialization: [NbConvertApp] CRITICAL | The 'export_format' trait of a NbConvertApp instance must be any of ['custom', 'html', 'latex', 'markdown', 'python', 'rst', 'slides'] or None, but a value of u'pdf' was specified.

Однако HTML отлично работает со слайдами, и это прекрасно! $ ipython nbconvert --to slides myfile.ipynb ... [NbConvertApp] Writing 215220 bytes to myfile.slides.html

// Обновление 2014-11-07Пт .: Синтаксис IPython v3 отличается, он проще; $ ipython nbconvert --to PDF myfile.ipynb Во всех случаях, похоже, мне не хватало библиотеки pdflatex. Я исследую это.


попробуйте: $ ipython nbconvert your_file.ipynb --to latex --post PDF
moldovean

ty @moldovean за то, что попросил меня еще раз взглянуть на это. Дальнейший поиск в Google только что выявил проблему. Порядок аргументов не имел значения, я все равно получил «Нет такого файла или каталога».
AnneTheAgile

это интересный вопрос. Может быть ... может быть, просто переустановка ipython поможет .. Я правда не знаю :(
moldovean

@moldovean, оказывается, требуются определенные библиотеки, но они не устанавливаются ipynb. В этом случае мне понадобится хотя бы pdflatex на моем пути. См. Мой PR, чтобы улучшить проверку ошибок, github.com/ipython/ipython/pull/6884
AnneTheAgile

3

Вы можете сделать это, сначала преобразовав записную книжку в HTML, а затем в формат PDF:

Следующие шаги, которые я реализовал: ОС: Ubuntu, ноутбук Anaconda-Jupyter, Python 3

1 Сохраните записную книжку в формате HTML:

  1. Запустите записную книжку jupyter, которую вы хотите сохранить в формате HTML. Сначала сохраните записную книжку правильно, чтобы в HTML-файле была последняя сохраненная версия вашего кода / записной книжки.

  2. Выполните следующую команду из самого ноутбука:

    !jupyter nbconvert --to html your_notebook_name.ipynb

После выполнения создаст HTML-версию вашей записной книжки и сохранит ее в текущем рабочем каталоге. Вы увидите, что один файл HTML будет добавлен в текущий каталог с your_notebook_name.htmlименем

( your_notebook_name.ipynb-> your_notebook_name.html).

2 Сохраните html как PDF:

  1. Теперь откройте этот your_notebook_name.htmlфайл (щелкните по нему). Он откроется в новой вкладке вашего браузера.
  2. Теперь перейдите к опции печати. Отсюда вы можете сохранить этот файл в формате PDF.

Обратите внимание, что с помощью параметра печати у нас также есть возможность выбрать часть записной книжки для сохранения в формате pdf.


2

Я искал способ сохранить записные книжки как html, так как всякий раз, когда я пытаюсь загрузить как html с моей новой установкой Jupyter, я всегда получаю сообщение 500 : Internal Server Error The error was: nbconvert failed: validate() got an unexpected keyword argument 'relax_add_props'об ошибке. Как ни странно, я обнаружил, что загрузка в формате html очень проста:

  1. Щелкните левой кнопкой мыши в блокноте
  2. В раскрывающемся меню нажмите "Сохранить как ...".
  3. Сохранить соответственно

Без предварительного просмотра, без печати, без nbconvert. Используя Jupyter Version: 1.0.0. Просто предложение попробовать (очевидно, не все настройки одинаковы).


2

Я считаю, что самый простой способ преобразовать записную книжку, которая есть в сети, в pdf - это сначала просмотреть ее в веб-сервисе nbviewer . Затем вы можете распечатать его в формате PDF. Если ноутбук находится на вашем локальном диске, сначала загрузите его в репозиторий github и используйте его URL для nbviewer.


2

Другие предлагаемые подходы:

  1. С помощью кнопки «Распечатать, а затем выбрать сохранить как PDF». из вашего HTML-файла приведет к потере краев границ, выделению синтаксиса, обрезке графиков и т. д.

  2. Некоторые другие библиотеки показали свою неработоспособность, когда дело доходит до использования устаревших версий.

Решение: лучший вариант без проблем - использовать онлайн-конвертер https://www.sejda.com/html-to-pdf, который преобразует * .html-версию вашего * .ipynb в * .pdf.

Шаги:

  1. Во-первых, из интерфейса вашего ноутбука Jupyter преобразуйте * .ipynb в * .html, используя

Файл> Скачать как> HTML (.html)

  1. Загрузите только что созданный файл * .html на https://www.sejda.com/html-to-pdf, а затем выберите вариант HTML в PDF.

  2. Теперь ваш PDF-файл готов к загрузке.

  3. Теперь у вас есть файлы .ipynb, .html и .pdf.


2

Я объединил некоторые ответы выше во встроенном питоне, который вы можете добавить в ~ / .bashrc или ~ / .zshrc для компиляции и преобразования многих записных книжек в один файл pdf.

function convert_notebooks(){
  # read anything on this folder that ends on ipynb and run pdf formatting for it  
  python -c 'import os; [os.system("jupyter nbconvert --to pdf " + f) for f in os.listdir (".") if f.endswith("ipynb")]'
  # to convert to pdf u must have installed latex and that means u have pdfjam installed
  pdfjam * 
}

2

Простая версия ответа партизаноса на питоне .

  • откройте Терминал (Linux, MacOS) или перейдите к точке, где вы можете запускать файлы python в Windows
  • Введите следующий код в файл .py (скажем, tejas.py)
import os

[os.system("jupyter nbconvert --to pdf " + f) for f in os.listdir(".") if f.endswith("ipynb")]
  • Перейдите в папку, содержащую записные книжки jupyter.
  • Убедитесь, что tejas.py находится в текущей папке. При необходимости скопируйте его в текущую папку.
  • введите "python tejas.py"
  • Работа сделана

Использование --template reportв качестве дополнительной опции также компилирует ToC в результирующий PDF-файл, используя разные заголовки уценки в записной книжке.
Стефан

2

ноутбук-как-pdfУстановить

python -m pip установить ноутбук как pdf pyppeteer-install

Используй это

Вы также можете использовать его с nbconvert:

jupyter-nbconvert --to PDFviaHTML filename.ipynb

который создаст файл с именем filename.pdf.

или pip install notebook-as-pdf

создать PDF-файл из записной книжки jupyter-nbconvert-toPDFviaHTML


Спасибо, у меня это сработало. Сначала я попробовал это в среде Python 3.6.8, но столкнулся с некоторыми проблемами. Затем я обновился до среды Python 3.7.8, основанной на Conda, и она работала как Charm.
mastDrinkNimbuPani

Это потому, что asyncio является зависимостью для пакета, а где-то в коде есть asyncio.run, который является методом только для версии 3.7.
mastDrinkNimbuPani


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.