Як конвертувати ноутбуки 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 - це безкоштовне середовище для ноутбуків Google від Jupyter, яке не потребує налаштування і працює повністю у хмарі. Якщо ви використовуєте 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
Все було згорнуто на одну сторінку -__-
htafoya

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 не поважає деякі css print) і працює набагато краще з 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>

І він повинен писати ваші (текстові) файли до тих пір, поки вилучені цифри будуть в 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 upІ nbconvert не дає мені безпосередньо файл PDF, а файл латексу, і я повинен обробити файл * .tex за допомогою pdflatex, але це хороше рішення.
nunzio13n

Чи можете ви відкрити випуск на github, і ми це розберемо.
Метт

Можливо, це не проблема nbconvert, але це пов’язано з моєю відсутністю знань про. Можливо, коли документація вийде, все буде зрозуміло, ipython із блокнотом та nbconvert - це дуже гарна робота, і я впевнений, що незабаром це буде документація.
nunzio13n

Здається, це втрачає / не дає жодної нумерації ipython (сподівався, що це перетвориться за допомогою директиви ipython).
Andy Hayden

Чи існує версія API, щоб це сталося? Я бачу, що є, IPython.nbconvert.exporters.latexі мені цікаво, чи є спосіб отримати вихід PDF з цього без інструменту командного рядка. Крім того, які залежності змушують його працювати? (pandoc, tetex, інші речі?) І я припускаю, що це не крос-платформа (не буде працювати в Windows). ТІА!
IanSR

11

Також передайте --executeпрапор, щоб отримати вихідні дані

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

Найкраща практика - не допускати вихідних даних із блокнота для контролю версій, див .: Використання блокнотів IPython під контролем версій

Але тоді, якщо ви не пройдете --execute, результат не буде присутній у HTML, див. Також: Як запустити блокнот .ipynb Jupyter із терміналу?

Для фрагмента HTML без заголовка: Як експортувати блокнот IPython у HTML для публікації в блозі?

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


9

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

Ось ваш ноутбук IPython (.ipynb) перетворений у формати PDF (.pdf) та HTML (.html).



4

Тільки ця відповідь буде корисною для вас, якщо у вашому документі є математичні та наукові формули. Навіть якщо їх у вас немає, це чудово працює.

Графічний інтерфейс

  • відкрийте блокнот jupyter відкрийте блокнот jupyter
  • Перейдіть до Файли> Завантажити як> HTML або PDF через LaTeX Перейдіть до Файли> Завантажити як> HTML або PDF через LaTeX

  • Потім перевірте файл у папці «Завантаження». PS: Якщо під час складання PDF-файлу у LaTeX виникли помилки, вона не вдасться. Якщо це трапиться, завантажте файл 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 за те, що я пінгнув ще раз поглянути на це. Більше гуглиння просто розкрило проблему. Порядок аргументів не мав значення, я все одно отримав "Немає такого файлу чи каталогу".
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. Використання Юпітера 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

Я об'єднав декілька відповідей вище, у вбудований python, який можна додати до ~ / .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

Простий python варіант відповіді partizanos .

  • відкрийте термінал (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

notebook-as-pdfВстановіть

python -m pip install notebook-as-pdf pyppeteer-install

Використай це

Ви також можете використовувати його з nbconvert:

jupyter-nbconvert --до PDFз іменем файлу HTML.ipynb

який створить файл із назвою filename.pdf.

або pip встановити notebook-as-pdf

створити PDF з блокнота jupyter-nbconvert-toPDFviaHTML


Дякую, це мені добре вдалось. Я вперше спробував це в середовищі Python 3.6.8, але зіткнувся з деякими проблемами. Потім я перейшов на середовище Python 3.7.8, засноване на Conda, і воно працювало як Чарівність.
mastDrinkNimbuPani

Це тому, що asyncio - це залежність для пакету, а десь у коді є asyncio.run, який є лише методом 3,7.
mastDrinkNimbuPani


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.