Проблемы 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)
чел
4
Это означает, что вам необходимо установить их, прежде чем вы сможете использовать эту функцию. И это не пакеты Python, поэтому вы не можете использовать pip.
чел
1
pandoc написан на Haskell.
Thomas K

Ответы:

33

Чтобы он работал, я установил латекс, типичный дополнительный латекс и pandoc.

С Ubuntu:

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

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

Juh_
источник
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/…
Акшай Хале
Для OSX 10.13.06 пришлось сделать: brew install pandocи brew cask install mactex-no-gui.
bue
12

2015-4-22: Похоже, что обновление 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

Как сказано в комментариях к вопросу, вам понадобятся pandoc и latex (например, TeXShop). Я установил pandoc с Homebrew, это заняло всего секунду. Имея pandoc и TeXShop, я мог генерировать латекс, но не pdf (в командной строке).

ipython nbconvert --to latex mynotebook.ipynb

При изучении файла latex (.tex) с помощью TeXShop ошибка была связана с отсутствием таблиц стилей и определений. После установки всего этого (adjustbox.sty, adjcalc.sty, trimclip.sty, collectbox.sty, tc-pgf.def, ucs.sty, uni-global.def, utf8x.def, ucsencs.def), наконец, Работа.

Однако, на мой вкус, результат выглядит слишком круто. Очень жаль, что при печати html из Safari теряется синтаксическая окраска. В остальном все выглядит не так уж плохо. (Это все на OS X).

Telliott99
источник
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. Как ни странно, часть моего mathjax отображается правильно (в начале документа), а затем по непонятной причине перестает отображать около 12 страниц документа.
Хью Перкинс,
3

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

Установите Nbconvert, Pandoc и Tex:

Откройте терминал и выполните в нем следующие команды.

Установите Nbconvert: хотя это часть экосистемы Jupyter, все же установите его еще раз

$conda install nbconvert

Или

$pip install nbconvert

Но я рекомендую использовать conda вместо pip, если вы используете anaconda

Установите 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, следуйте приведенным ниже инструкциям:

( Будьте внутри записной книжки Jupyter ):

На Mac OS :

command + P -> откроется диалоговое окно печати -> изменить место назначения как PDF -> Нажмите печать

На Windows :

Ctrl + P -> вы получите диалоговое окно печати -> изменить место назначения как PDF -> Нажмите кнопку печати

Если вышеуказанные шаги не создают полный PDF-файл записной книжки Jupyter (возможно, потому, что Chrome иногда не печатает все выходные данные, потому что Jupyter делает прокрутку для больших выходов),

Попробуйте выполнить следующие шаги для удаления автоматической прокрутки в меню : -

Кредиты: @ ÂngeloPolotto

  1. В записной книжке Jupyter щелкните Ячейка в верхней части записной книжки jupyter. введите описание изображения здесь

  2. Затем нажмите Весь вывод -> Переключить прокрутку для удаления автоматической прокрутки.

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

Акшай Рамеш
источник
Я согласен, но Chrome иногда не печатает все выходные данные, потому что Jupyter делает прокрутку для больших результатов. Вам нужно удалить автоматическую прокрутку в меню Ячейка-> Все выходы-> Переключить прокрутку (ссылка: stackoverflow.com/a/52803744/6846888 )
Анджело Полотто 05
Можете ли вы добавить эту информацию в свой ответ? Это может быть очень полезно для большего числа пользователей.
Анджело Полотто 06
1
Да @ ÂngeloPolotto, я добавил вашу информацию в свой ответ.
Акшай Рамеш
1

Эта проблема наблюдалась как в Ubuntu, так и в Mac OSX. После неистовых поисков и испытаний они оба были раскрыты. Для этого требуются оба texи pandoc; обе большие внешние программы не могут быть установлены Python pip.

Mac OSX: установка pandoc с помощью MacPorts

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, который я сохранил. Он захватил весь мой код, текст и графики. Это было достаточно для того, что мне было нужно.

twin_pilgrim
источник
1
В моем случае html помещает одну ячейку на страницу, даже если она слишком длинная. Так что не решение
Juh_
1

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

Снимок экрана Конвертировать ipynb в pdf

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

Лефтерис Крис
источник
И если это не сработает, вы можете напрямую использовать nbconvert в командной строке и точно узнать, что вызывает проблемы с латексом.
Уильям Штайн
1

Как новый участник, я не мог просто добавить комментарий к посту, но хочу подтвердить, что решение, предложенное Филлипом Шварцем, сработало для меня. Надеюсь, люди в подобной ситуации попробуют этот путь раньше с упором. Долгое время отсутствие разрывов страниц было неприятной проблемой, поэтому я благодарен за обсуждение выше.

Как сказал Филипп Шварц: «Вам необходимо установить wkhtmltopdf: [ http://wkhtmltopdf.org/downloads.html ]

и Nbconvert "

Затем вы добавляете ячейку типа rawNBConvert и включаете:

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

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

Ody
источник
1

notebook-as-pdf Установить python -m pip install notebook-as-pdf pyppeteer-install

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

jupyter-nbconvert --to PDFviaHTML filename.ipynb

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

или pip install 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')
jvdam
источник
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
pgmank
источник
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

Команды могут отличаться в зависимости от вашей системы, но основные шаги остаются прежними.

Manojk07
источник
0

У меня была эта ошибка в Windows 10. Я выполнил эти три шага, и моя проблема была решена:

  1. Установить nbconvert

    pip install nbconvert

  2. Установить pandoc

https://pandoc.org/installing.html

  1. Установить миктекс

https://miktex.org/download


Также хорошо обновить библиотеки:

pip install jupyter --upgrade
pip install --upgrade --user nbconvert
mah65
источник