Проблеми з IPython / Jupyter при збереженні ноутбука у форматі PDF


86

Отже, я намагався зберегти блокнот jupyter як PDF, але я просто не можу зрозуміти, як це зробити. Перше, що я намагаюся - це з меню файлу просто завантажити як PDF, але це призводить до:

nbconvert failed: PDF creating failed

наступне, що я намагаюся, це спробувати виконати перетворення з командного рядка таким чином

$ ipython nbconvert --to latex --post PDF MyNotebook.ipynb 

але знову ж це призводить до повідомлення про помилку

ImportError: No module named 'PDF'

і якщо я спробую

$ ipython nbconvert --to latex MyNotebook.ipynb 

це призводить до

IPython.nbconvert.utils.pandoc.PandocMissing: Pandoc wasn't found:
Please check that pandoc is installed

якщо я спробую встановити pandoc ( pip install pandoc), це дає мені

ImportError: No module named 'ConfigParser'

і тут я застряю, бо просто не знаю, що ще робити. Хтось має ідею, як виправити все, що не так?


2
створення PDF-файлів вимагає непітонічних залежностей (тобто pandocта latex)
cel

4
Це означає, що вам доведеться встановити їх, перш ніж ви зможете використовувати цю функцію. І це не пакети python, тому ви не можете використовувати pip.
cel

1
pandoc написано на Haskell.
Thomas K

Відповіді:


33

Щоб це працювало, я встановив латекс, типовий латекс екстра та pandoc.

З ubuntu:

sudo apt-get install texlive texlive-latex-extra pandoc

це займає кілька разів: кілька 100 Мб для завантаження. Я десь читав, що ви можете використовувати --no-install-recommendsдля texlive та extra для зменшення до dl.


8
Шахта потрібна pandocі texlive-xetex.
douggard

Я знайшов менший список пакетів на ask_ubuntu .
Ерік Думініл

1
Мені також потрібно було texlive-generic-extraвирішити цю проблему , крім texlive-xetexпропозицій @douggard.
pgmank

Велике спасибі, що дуже допомогло :)
farnaz jazayeri

30

Якщо ви перебуваєте на Mac і у вас встановлено Homebrew, відкрийте оболонку терміналу та встановіть pandoc, набравши команду:

brew install pandoc

запасіться терпінням, час встановлення та компіляції може зайняти деякий час на повільних підключеннях до Інтернету або старих системах.


3
Це працювало на OS X 10.10. Тепер я можу конвертувати в LaTeX та PDF. (Моя установка на pandoc зайняла менше хвилини ... Напевно, у мене була вже більшість компонентів у моїй системі.) ДЯКУЮ!
drpetermolnar

1
@drpetermolnar Це також спрацювало для мене (OSX 10.11.6). Зайняло 2 хвилини.
timothyjgraham

1
@Akshay, команда така: ipython nbconvert --to PDF <ваш блокнот> .ipynb
Андреа

@AndreaNalon Команда вище, не працює, stackoverflow.com/questions/43247818 / ...
Акшай Khale

Для OSX 10.13.06 мені довелося зробити: brew install pandocі brew cask install mactex-no-gui.
буе

12

22.04.2015: Схоже, оновлення IPython означає, що його --to pdfслід використовувати замість --to latex --post PDF. Є пов’язана проблема Github .


10

Для перетворення блокнотів у PDF спочатку потрібно встановити nbconvert.

pip install nbconvert
# OR
conda install nbconvert

Далі, якщо ви не використовуєте Anaconda або ще не використовували, ви повинні встановити pandoc, дотримуючись інструкцій на їх веб-сайті або в Linux наступним чином:

sudo apt-get install pandoc

Після цього вам потрібно встановити XeTex на вашому комп'ютері:

Тепер ви можете перейти до папки, в якій знаходиться ваш блокнот IPython, і виконати таку команду:

jupyter nbconvert --to pdf MyNotebook.ipynb

для подальшої довідки, будь ласка, перевірте це посилання .


4

Як зазначається у коментарях до запитання, вам знадобляться пандок та латекс (наприклад, TeXShop). Я встановив pandoc з Homebrew, це зайняло лише секунду. Маючи pandoc та TeXShop, я міг генерувати латекс, але не PDF (у командному рядку).

ipython nbconvert --to latex mynotebook.ipynb

Досліджуючи латексний (.tex) файл за допомогою TeXShop, помилка сталася через відсутність таблиць стилів та файлів defs. Після встановлення всіх цих (Adjustbox.sty, adjcalc.sty, trimclip.sty, collectbox.sty, tc-pgf.def, ucs.sty, uni-global.def, utf8x.def, ucsencs.def), нарешті це вдалося робота.

Однак результат виглядає занадто забавним на мій смак. Шкода, що друк html із Safari втрачає забарвлення синтаксису. В іншому випадку це виглядає не так погано. (Це все на OS X).


1
Наступний короткий рядок безпосередньо створив файл PDF, не залишаючи проміжних файлів, створених під час компіляції. jupyter nbconvert --to pdf filename.ipynb
llinfeng

Принаймні, зараз у них є виправлення для друку кольором, так що друк HTML безпосередньо в PDF стає менш поганим: github.com/jupyter/notebook/issues/840
flutefreak7

3

Цей сценарій Python має графічний інтерфейс для вибору за допомогою провідника блокнота Ipython, який ви хочете конвертувати у PDF. Підхід з wkhtmltopdf - єдиний підхід, який, на мою думку, працює добре і забезпечує високоякісні PDF-файли. Інші описані тут підходи є проблематичними, підсвічування синтаксису не працює або графіки переплутані.

Вам потрібно буде встановити wkhtmltopdf: http://wkhtmltopdf.org/downloads.html

та Nbconvert

pip install nbconvert
# OR
conda install nbconvert

Скрипт Python

# Script adapted from CloudCray
# Original Source: https://gist.github.com/CloudCray/994dd361dece0463f64a
# 2016--06-29
# This will create both an HTML and a PDF file

import subprocess
import os
from Tkinter import Tk
from tkFileDialog import askopenfilename

WKHTMLTOPDF_PATH = "C:/Program Files/wkhtmltopdf/bin/wkhtmltopdf"  # or wherever you keep it

def export_to_html(filename):
    cmd = 'ipython nbconvert --to html "{0}"'
    subprocess.call(cmd.format(filename), shell=True)
    return filename.replace(".ipynb", ".html")


def convert_to_pdf(filename):
    cmd = '"{0}" "{1}" "{2}"'.format(WKHTMLTOPDF_PATH, filename, filename.replace(".html", ".pdf"))
    subprocess.call(cmd, shell=True)
    return filename.replace(".html", ".pdf")


def export_to_pdf(filename):
    fn = export_to_html(filename)
    return convert_to_pdf(fn)

def main():
    print("Export IPython notebook to PDF")
    print("    Please select a notebook:")

    Tk().withdraw() # Starts in folder from which it is started, keep the root window from appearing 
    x = askopenfilename() # show an "Open" dialog box and return the path to the selected file
    x = str(x.split("/")[-1])

    print(x)

    if not x:
        print("No notebook selected.")
        return 0
    else:
        fn = export_to_pdf(x)
        print("File exported as:\n\t{0}".format(fn))
        return 1

main()

script начебто довгий для відповіді на stackoverflow і просто обгортає wkhtml. Я вважаю, що відповідь буде зрозумілішою, якщо ви просто встановите параметри командного рядка для wkhtml та приклад.
Х'ю Перкінс

отже, в основному ви використовуєте nbconvertдля експорту в html, а потім wkhtmltopdfдля перетворення в pdf. але це не зрозуміло з вашої відповіді :-)
Х'ю Перкінс

Отже, я спробував це. Це фактично краще, ніж експортувати безпосередньо у PDF. Дивно, але деякі мої математичні математичні дані відображаються правильно (на початку документа), а потім припиняють візуалізацію, приблизно на 12 сторінках у документі, без очевидної причини.
Х'ю Перкінс

3

Я використовую ноутбук Anaconda-Jupyter в ОС: Ubuntu 16.0 для програмування на Python.

Встановіть Nbconvert, Pandoc та Tex:

Відкрийте термінал і реалізуйте в ньому наступні команди.

Встановіть Nbconvert: хоча це частина екосистеми Юпітера, все одно встановіть її ще раз

$conda install nbconvert

Або

$pip install nbconvert

Але я рекомендую використовувати conda замість pip, якщо ви використовуєте анаконду

Встановіть Pandoc: оскільки Nbconvert використовує Pandoc для перетворення націнки в інші формати, окрім HTML. Введіть наступну команду

$sudo apt-get install pandoc

Встановити TeX: Для перетворення в PDF nbconvert використовує TeX. Введіть наступну команду

$sudo apt-get install texlive-xetex

Після виконання цих команд закрийте відкриті блокноти, оновіть домашню сторінку або перезапустіть ядро ​​відкритого блокнота. А зараз спробуйте завантажити блокнот у форматі pdf :)

Примітка. Докладніше див. В офіційній документації:
https://nbconvert.readthedocs.io/en/latest/install.html


2

Для перетворення будь-якого ноутбука Jupyter у формат PDF дотримуйтесь наведених нижче інструкцій:

( Будьте в зошиті Юпітера ):

У Mac OS :

команда + P -> ви отримаєте діалогове вікно друку -> змінити пункт призначення як PDF -> Клацніть друк

У Windows :

Ctrl + P -> ви отримаєте діалогове вікно друку -> змінити пункт призначення як PDF -> Клацніть друк

Якщо наведені вище дії не генерують повний PDF-запис ноутбука Jupyter (можливо, тому, що Chrome, іноді, не друкує всі результати, оскільки Jupyter робить прокрутку для великих результатів),

Спробуйте виконати наведені нижче дії для видалення автоматичної прокрутки в меню : -

Подяки: @ ÂngeloPolotto

  1. У своєму блокноті Jupyter клацніть клітинку у верхній частині блокнота jupyter введіть тут опис зображення

  2. Далі натисніть Усі вихідні дані -> Переключити прокрутку для видалення автоматичної прокрутки.

введіть тут опис зображення


Я згоден, але Chrome, часом, не друкує всі результати, оскільки Юпітер робить прокрутку для великих результатів. Вам потрібно видалити автопрокрутку в стільниковому меню> Все Outputs-> Переключити скролінг (посилання: stackoverflow.com/a/52803744/6846888 )
Ângelo Polotto

Чи можете ви додати цю інформацію у свою відповідь? Це може бути дуже корисно для більшої кількості користувачів.
Янгело Полотто

1
Так @ ÂngeloPolotto, я додав вашу інформацію у свою відповідь.
Акшай Рамеш,

1

Ця проблема виникала як в Ubuntu, так і в Mac OSX. Після шаленого набору обшуків та судових процесів обидва вони були вирішені. Для цього потрібні texі pandoc; обидві зовнішні програми jumbo не можуть бути встановлені Python pip.

Mac OSX: за допомогою інсталяції MacPorts pandoc

port install pandoc

Це має зайняти майже годину (у звичайному випадку). Якщо проблема не зникне, можливо, доведеться встановити дистрибутив MacTeX. TeXLive.

Для Ubuntu: встановіть ванільний TeXLive із мережевого інсталятора - не через apt-get . Потім встановіть pandoc за допомогою apt-get.

sudo apt-get install pandoc

Повна установка TeXLive потребує до 4,4 ГБ на диску.

Щоб врятувати всі ці проблеми, рекомендованим способом використання IPython / Jupyter Notebook було б встановити дистрибутив Anaconda Python.


1

У мене були всілякі проблеми, щоб зрозуміти це. Я не знаю, чи буде він надавати саме те, що вам потрібно, але я завантажив свій блокнот як HTML-файл, потім витягнув його у своєму браузері Chrome, а потім роздрукував як PDF-файл, який я зберег. Він захопив увесь мій код, текст та графіки. Це було досить добре для того, що мені потрібно.


1
У моєму випадку html ставить по одній комірці на сторінку, навіть якщо вона занадто довга. Тож не рішення
Juh_

1

Якщо ви використовуєте хмарну версію sagemath , ви можете просто перейти в лівий кут,
вибрати Файл -> Завантажити як -> Pdf через LaTeX (.pdf)
Перевірте знімок екрана, якщо хочете.

Знімок екрана Перетворення ipynb у PDF

Якщо з якихось причин це не працює, ви можете спробувати інший спосіб.
виберіть Файл -> Попередній перегляд друку, а потім на попередньому перегляді
клацніть правою кнопкою миші -> Друк, а потім виберіть Зберегти як PDF.


І якщо це не спрацює, ви можете безпосередньо використовувати nbconvert у командному рядку і побачити, що саме спричиняє проблеми з латексом.
Вільям Штейн

1

Як новий член, я не зміг просто додати коментар до публікації, але хочу сказати, що рішення, запропоноване Філіпом Шварцом, спрацювало для мене. Сподіваємось, люди в подібній ситуації спробують скоріше цей шлях з акцентом. Відсутність розривів сторінок тривалий час було неприємною проблемою, тому я вдячний за обговорення вище.

Як сказав Філіп Шварц: "Вам потрібно буде встановити wkhtmltopdf: [ http://wkhtmltopdf.org/downloads.html][1]

та Nbconvert "

Потім ви додаєте комірку типу "rawNBConvert" і включаєте:

<p style="page-break-after:always;"></p>

Здавалося, це зробило для мене фокус, і у створеному PDF-файлі сторінка розірвалась у відповідних місцях. Вам не потрібно запускати власний код, оскільки, здається, "звичайний" шлях завантаження ноутбука у форматі HTML, відкриття у браузері та друк у PDF працює після встановлення цих утиліт.


1

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


0

Я виявив, що nbconvert / utils / pandoc.py мав помилку коду, що призвело до помилки для моєї машини. Код перевіряє, чи є pandoc у шляху змінних середовища. Для моєї машини відповідь - ні. Однак pandoc.exe є!

Рішенням було додати '.exe' до коду в рядку 69

if __version is None:
    if not which('pandoc.exe'):
        raise PandocMissing()

Те саме стосується не встановленого «xelatex». Додайте до файлу nbconvert / exporters / pdf.py у рядку 94

    cmd = which(command_list[0]+'.exe')

0

Щоб перетворити .ipynb у pdf, ваша система повинна містити 2 компоненти,

  1. nbconvert : Частина jupyter дозволяє перетворити ipynb в pdf

    pip install nbconvert
    OR 
    conda install nbconvert
    
  2. XeTeX: перетворення ipynb у формат .tex, а потім перетворення у pdf.

    sudo apt-get install texlive-xetex
    

Тоді ви можете скористатися наведеною нижче командою для перетворення в pdf,

ipython nbconvert --to pdf YOURNOTEBOOK.ipynb

Якщо це не спрацює, встановіть pandoc і повторіть спробу.

sudo apt-get install pandoc

0

Для користувачів Ubuntu відповідь можна знайти тут . Я також цитую це:

Найімовірнішою причиною є те, що ви не встановили відповідні залежності. У вашій системі Ubuntu повинні бути встановлені деякі пакети щодо перетворення файлів LaTeX та XeTeX, щоб зберегти ваш ноутбук як PDF. Ви можете встановити їх за допомогою:

sudo apt-get install texlive texlive-xetex texlive-generic-extra texlive-generic-recommended pandoc

Крім того, nbconvertє ще одна залежність, яка зазвичай встановлюється автоматично за допомогою jupyter. Але ви можете встановити його, щоб бути впевненим, під час активації вашого віртуального середовища:

pip install -U nbconvert

0

У мене виникли проблеми з правильним відображенням деяких символів при регулярному завантаженні у форматі PDF . Тому завантажив як tex jupyter nbconvert --to latex "my notebook.ipynb", зробив кілька налаштувань за допомогою блокнота (як приклад, у моєму випадку мені потрібні були ці рядки для моєї мови

\usepackage{tgpagella}
\usepackage[lithuanian,english]{babel}

), а потім експортується у PDF за допомогою latex --output-format=pdf "my notebook.tex".

Але в кінці кінців, однак, зберегти ті ж символи, які Ви бачите в браузері , я в кінцевому підсумку з допомогою моєї друку браузера Chrome: Ctrl+P Print to pdf. Він додає зайвий верхній і нижній колонтитули, але все інше залишається як є. Немає більше помилок при обробці індикатора прогресу tqdm, більше немає виходу коду зі сторінки тощо. Просто як це.


0

У будь-якій системі основними кроками для правильної настройки nbconvert для перетворення ноутбуків ipython у pdf / latex є

  1. Встановіть nbconvert
  2. Встановіть pandoc
  3. Встановіть Texlive

Встановлення nbconvert

pip install nbconvert

або conda install nbconvert

Встановлення pandoc

sudo apt-get install pandoc для Ubuntu

або sudo yum install pandocдля CentOS

для інших відвідайте pandoc-installation

Встановлення texlive

Ви можете встановити рекомендовані пакети або повністю встановити. Для Ubuntu

sudo apt-get install texlive texlive-xetex texlive-generic-extra texlive-generic-recommended

`

Для інших та для повної установки texlive дотримуйтесь інструкцій, наведених на буксирі , відповідно до вашої системи та вибору.

Я завантажив файл tar.gz із програми tug-texlive-download і слідував інструкціям, наведеним у TeX Live - Швидке встановлення . Інструкції з монтажу в підсумку:

  1. Прибирати

    rm -rf /usr/local/texlive/2019

    rm -rf ~/.texlive2019

  2. Запустіть інсталятор

    розпакуйте zip-файл

    cd /your/unpacked/directory

    perl install-tl

    Введіть команду: i

  3. Шлях встановлення

    sudo vi /etc/bash.bashrc і вставити

    PATH=/usr/local/texlive/2019/bin/x86_64-linux:$PATH; export PATH

    MANPATH=/usr/local/texlive/2019/texmf-dist/doc/man:$MANPATH; export MANPATH

    INFOPATH=/usr/local/texlive/2019/texmf-dist/doc/info:$INFOPATH; export INFOPATH

  4. Встановлення розміру паперу за замовчуванням

    tlmgr paper letter

Команди можуть відрізнятися залежно від вашої системи, але основні кроки залишаються незмінними.


0

У мене сталася ця помилка у Windows 10. Я виконав ці три кроки, і це вирішило мою проблему:

  1. Встановіть nbconvert

    pip встановити nbconvert - -

  2. Встановіть pandoc

https://pandoc.org/installing.html

  1. Встановіть miktex

https://miktex.org/download


Також добре оновити бібліотеки:

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