IPython / Jupyter Problemy z zapisaniem notatnika jako PDF

86

Próbowałem więc zapisać notatnik jupyter jako plik PDF, ale po prostu nie mogę dowiedzieć się, jak to zrobić. Pierwszą rzeczą, którą próbuję, jest pobranie z menu plików po prostu jako PDF, ale w rezultacie:

nbconvert failed: PDF creating failed

Następną rzeczą, którą próbuję, jest próba konwersji z wiersza polecenia w ten sposób

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

ale znowu powoduje to komunikat o błędzie

ImportError: No module named 'PDF'

i jeśli spróbuję

$ ipython nbconvert --to latex MyNotebook.ipynb 

to skutkuje

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

jeśli spróbuję zainstalować pandoc ( pip install pandoc), to daje mi

ImportError: No module named 'ConfigParser'

i tutaj utknąłem, ponieważ po prostu nie wiem, co jeszcze zrobić. Czy ktoś ma pomysł, jak naprawić to, co jest nie tak?

Isak Baizley
źródło
2
tworzenie plików PDF wymaga nie-pythonowych zależności (tj. pandoci latex)
cel
4
Oznacza to, że musisz je zainstalować, zanim będziesz mógł korzystać z tej funkcji. I nie są to pakiety Pythona, dlatego nie możesz używać pip.
cel
1
pandoc jest napisany w języku Haskell.
Thomas K

Odpowiedzi:

33

Aby to działało, zainstalowałem latex, typowy latex extra i pandoc.

Z ubuntu:

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

zajmuje to trochę czasu: kilka 100 Mb do pobrania. Czytałem gdzieś, że możesz użyć --no-install-recommendsdo texlive i extra, aby zredukować do dl.

Juh_
źródło
8
Moje wymagane pandoci texlive-xetex.
douggard
Znalazłem mniejszą listę pakietów na ask_ubuntu .
Eric Duminil
1
Potrzebowałem również texlive-generic-extrarozwiązania tego problemu , poza texlive-xetextym, co zasugerował @douggard.
pgmank
Wielkie dzięki, że była to wielka pomoc :)
farnaz jazayeri
30

Jeśli używasz komputera Mac i masz zainstalowany program Homebrew, otwórz powłokę terminala i zainstaluj pandoc, wpisując polecenie:

brew install pandoc

bądź cierpliwy, czas instalacji i kompilacji może zająć trochę czasu w przypadku wolnych połączeń internetowych lub starszych systemów.

Andrea
źródło
3
To działało na OS X 10.10. Mogę teraz konwertować do LaTeX i PDF. (Moja instalacja na pandoc zajęła mniej niż minutę ... większość komponentów musiałem mieć już w swoim systemie.) DZIĘKI!
drpetermolnar
1
@drpetermolnar To też działało dla mnie (OSX 10.11.6). Zajęło 2 minuty.
timothyjgraham
1
@Akshay, polecenie brzmi: ipython nbconvert --to PDF <twój notatnik> .ipynb
Andrea
@AndreaNalon Wspomniane powyżej polecenie nie działa, stackoverflow.com/questions/43247818/…
Akshay Khale
W przypadku OSX 10.13.06 musiałem zrobić: brew install pandoci brew cask install mactex-no-gui.
piątek
12

2015-4-22: Wygląda na to, że aktualizacja IPythona oznacza, że --to pdfpowinna być używana zamiast --to latex --post PDF. Istnieje powiązany problem z Githubem .

Scott
źródło
10

Aby przekonwertować notatniki do formatu PDF, musisz najpierw zainstalować nbconvert.

pip install nbconvert
# OR
conda install nbconvert

Następnie, jeśli nie używasz Anacondy lub jeszcze tego nie zrobiłeś, musisz zainstalować pandoc, postępując zgodnie z instrukcjami na ich stronie internetowej lub w systemie Linux w następujący sposób:

sudo apt-get install pandoc

Następnie musisz mieć zainstalowany XeTex na swoim komputerze:

Możesz teraz przejść do folderu, w którym znajduje się Twój notatnik IPython i uruchomić następujące polecenie:

jupyter nbconvert --to pdf MyNotebook.ipynb

w celu uzyskania dalszych informacji, sprawdź ten link .

Tanmay Lata
źródło
4

Jak mówią komentarze do pytania, będziesz potrzebować pandoku i lateksu (np. TeXShop). Zainstalowałem pandoc z Homebrew, zajęło to tylko sekundę. Mając pandoc i TeXShop, mogłem generować lateks, ale nie PDF (w linii poleceń).

ipython nbconvert --to latex mynotebook.ipynb

Eksplorując plik latex (.tex) w TeXShop, błąd wynikał z braku arkuszy stylów i definicji. Po zainstalowaniu tych wszystkich (adjustbox.sty, adjcalc.sty, trimclip.sty, collectbox.sty, tc-pgf.def, ucs.sty, uni-global.def, utf8x.def, ucsencs.def) w końcu się udało praca.

Jednak wynik wygląda trochę zbyt fajnie jak na mój gust. Szkoda, że ​​drukowanie html z Safari traci kolorowanie składni. W przeciwnym razie nie wygląda to tak źle. (To wszystko na OS X).

telliott99
źródło
1
Poniższy krótki wiersz bezpośrednio wygenerował plik PDF, bez pozostawiania żadnych plików pośrednich utworzonych podczas kompilacji. jupyter nbconvert --to pdf filename.ipynb
llinfeng
Przynajmniej mają teraz poprawkę do drukowania w kolorze, dzięki czemu drukowanie HTML bezpośrednio do PDF jest mniej złe: github.com/jupyter/notebook/issues/840
flutefreak7
3

Ten skrypt Pythona ma GUI do wybrania za pomocą eksploratora notatnika Ipython, który chcesz przekonwertować do formatu PDF. Podejście z wkhtmltopdf to jedyne podejście, które znalazłem, działa dobrze i zapewnia wysokiej jakości pliki PDF. Inne opisane tutaj podejścia są problematyczne, podświetlanie składni nie działa lub wykresy są popsute.

Musisz zainstalować wkhtmltopdf: http://wkhtmltopdf.org/downloads.html

i Nbconvert

pip install nbconvert
# OR
conda install nbconvert

Skrypt w Pythonie

# 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()
Philipp Schwarz
źródło
skrypt jest naprawdę długi na odpowiedź typu stackoverflow i po prostu zawija wkhtml. Wydaje mi się, że odpowiedź będzie jaśniejsza, jeśli po prostu umieścisz opcje wiersza poleceń dla wkhtml i przykład.
Hugh Perkins,
więc w zasadzie używasz nbconvertdo eksportu do html, a następnie używasz wkhtmltopdfdo konwersji do pdf. ale to nie jest jasne z Twojej odpowiedzi :-)
Hugh Perkins
Więc spróbowałem tego. Jest to efektywnie lepsze niż eksportowanie bezpośrednio do formatu PDF. Co dziwne, część mojego mathjaxa jest renderowana poprawnie (na początku dokumentu), a następnie przestaje renderować około 12 stron w dokumencie, bez wyraźnego powodu.
Hugh Perkins
3

Używam notebooka Anaconda-Jupyter w systemie operacyjnym: Ubuntu 16.0 do programowania w języku Python.

Zainstaluj Nbconvert, Pandoc i Tex:

Otwórz terminal i zaimplementuj w nim następujące polecenia.

Zainstaluj Nbconvert: chociaż jest to część ekosystemu Jupyter, nadal zainstaluj go ponownie

$conda install nbconvert

Lub

$pip install nbconvert

Ale polecę użycie conda zamiast pip, jeśli używasz anakondy

Zainstaluj Pandoc: ponieważ Nbconvert używa Pandoc do konwersji markdown do formatów innych niż HTML. Wpisz następujące polecenie

$sudo apt-get install pandoc

Zainstaluj TeX: do konwersji do formatu PDF, nbconvert używa TeX-a. Wpisz następujące polecenie

$sudo apt-get install texlive-xetex

Po wykonaniu tych poleceń zamknij otwarte notatniki odśwież stronę główną Lub zrestartuj jądro otwartego notatnika. Teraz spróbuj pobrać notatnik w formacie PDF :)

Uwaga: aby uzyskać więcej informacji, zapoznaj się z oficjalną dokumentacją:
https://nbconvert.readthedocs.io/en/latest/install.html

Yogesh
źródło
2

Aby przekonwertować dowolny notatnik Jupyter do formatu PDF, postępuj zgodnie z poniższymi instrukcjami:

( Bądź w notatniku Jupyter ):

W systemie Mac OS :

polecenie + P -> pojawi się okno dialogowe drukowania -> zmień miejsce docelowe na PDF -> kliknij Drukuj

W systemie Windows :

Ctrl + P -> pojawi się okno dialogowe drukowania -> zmień miejsce docelowe na PDF -> kliknij Drukuj

Jeśli powyższe kroki nie generują pełnego pliku PDF notebooka Jupyter (prawdopodobnie dlatego, że Chrome czasami nie drukuje wszystkich wyników, ponieważ Jupyter wykonuje przewijanie dla dużych wyników),

Spróbuj wykonać poniższe czynności, aby usunąć automatyczne przewijanie w menu : -

Kredyty: @ ÂngeloPolotto

  1. W notatniku Jupyter kliknij Komórka na górze notesu Jupyter wprowadź opis obrazu tutaj

  2. Następnie kliknij Wszystkie dane wyjściowe -> Przełącz przewijanie, aby usunąć automatyczne przewijanie.

wprowadź opis obrazu tutaj

Akshay Ramesh
źródło
Zgadzam się, ale Chrome czasami nie drukuje wszystkich wyników, ponieważ Jupyter wykonuje przewijanie dla dużych wyników. Musisz usunąć automatyczne przewijanie w menu Cell-> All Outputs-> Toggle Scrolling (odniesienie: stackoverflow.com/a/52803744/6846888 )
Ângelo Polotto
Czy możesz dodać te informacje do swojej odpowiedzi? Może to być bardzo pomocne dla większej liczby użytkowników.
Ângelo Polotto
1
Tak @ ÂngeloPolotto, dodałem Twoje informacje w mojej odpowiedzi.
Akshay Ramesh
1

Ten problem wystąpił zarówno w systemie Ubuntu, jak i Mac OSX. Po szalonych poszukiwaniach i próbach oba zostały rozwiązane. Wymaga to zarówno texi pandoc; oba zewnętrzne programy jumbo nie mogą zostać zainstalowane przez Pythona pip.

Mac OSX: przy użyciu MacPorts instalacja pandoc

port install pandoc

Powinno to zająć prawie godzinę (w zwykłym przypadku). Jeśli problem będzie się powtarzał, może być konieczne zainstalowanie dystrybucji MacTeX. TeXLive.

W przypadku Ubuntu: zainstaluj vanilla TeXLive z instalatora sieciowego - nie przez apt-get . Następnie zainstaluj pandoc za pomocą apt-get.

sudo apt-get install pandoc

Pełna instalacja TeXLive wymagałaby do 4,4 GB miejsca na dysku.

Aby zaoszczędzić na tym wszystkim, zalecanym sposobem korzystania z IPython / Jupyter Notebook byłoby zainstalowanie dystrybucji Anaconda Python.

Ébe Isaac
źródło
1

Miałem też wiele problemów, aby to rozgryźć. Nie wiem, czy dostarczy dokładnie tego, czego potrzebujesz, ale pobrałem mój notebook jako plik HTML, a następnie pobrałem go w przeglądarce Chrome, a następnie wydrukowałem jako plik PDF, który zapisałem. Przechwycił cały mój kod, tekst i wykresy. To było wystarczająco dobre na to, czego potrzebowałem.

twin_pilgrim
źródło
1
W moim przypadku HTML wstawia jedną komórkę na stronę, nawet jeśli jest za długa. Więc nie jest rozwiązaniem
Juh_
1

Jeśli korzystasz z wersji sagemath w chmurze, możesz po prostu przejść do lewego rogu i
wybrać Plik -> Pobierz jako -> Pdf przez LaTeX (.pdf).
Jeśli chcesz, sprawdź zrzut ekranu.

Zrzut ekranu Konwertuj ipynb na pdf

Jeśli z jakiegoś powodu to nie zadziała, możesz spróbować innego sposobu.
wybierz Plik -> Podgląd wydruku a następnie na podglądzie
kliknij prawym przyciskiem myszy -> Drukuj a następnie wybierz zapisz jako pdf.

Lefteris Xris
źródło
A jeśli to nie zadziała, możesz bezpośrednio użyć nbconvert w wierszu poleceń i zobaczyć dokładnie, co powoduje problemy z lateksem.
William Stein
1

Jako nowy członek nie mogłem po prostu dodać komentarza do posta, ale chcę dodać, że rozwiązanie oferowane przez Phillipa Schwartza zadziałało dla mnie. Miejmy nadzieję, że ludzie w podobnej sytuacji spróbują tej ścieżki wcześniej z naciskiem. Brak podziałów stron był frustrującym problemem przez dłuższy czas, więc jestem wdzięczny za powyższą dyskusję.

Jak powiedział Phillip Schwartz: „Musisz zainstalować wkhtmltopdf: [ http://wkhtmltopdf.org/downloads.html][1]

i Nbconvert "

Następnie dodajesz komórkę typu „rawNBConvert” i dodajesz:

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

Wydawało się, że to załatwiło sprawę, a wygenerowany plik PDF miał podział strony w odpowiednich miejscach. Nie musisz jednak uruchamiać niestandardowego kodu, ponieważ wydaje się, że „normalna” ścieżka pobierania notatnika w formacie HTML, otwierania w przeglądarce i drukowania do formatu PDF działa po zainstalowaniu tych narzędzi.

Ody
źródło
1

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

Użyj tego Możesz go również użyć z nbconvert:

jupyter-nbconvert --to PDF viaHTML nazwa_pliku.ipynb

co spowoduje utworzenie pliku o nazwie nazwa_pliku.pdf.

lub pip install notebook-as-pdf

utwórz plik PDF z notatnika jupyter-nbconvert-toPDFviaHTML

Dhiren Biren
źródło
0

Odkryłem, że plik nbconvert / utils / pandoc.py zawiera błąd kodu, który spowodował błąd na moim komputerze. Kod sprawdza, czy pandoc znajduje się w ścieżce zmiennych środowiskowych. W przypadku mojej maszyny odpowiedź brzmi: nie. Jednak pandoc.exe jest!

Rozwiązaniem było dodanie „.exe” do kodu w linii 69

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

To samo dotyczy „xelatex” nie jest zainstalowany. Dodaj do pliku nbconvert / exporters / pdf.py w wierszu 94

    cmd = which(command_list[0]+'.exe')
jvdam
źródło
0

Aby przekonwertować .ipynb na pdf, twój system powinien zawierać 2 komponenty,

  1. nbconvert : Jest częścią jupyter pozwala na konwersję ipynb do pdf

    pip install nbconvert
    OR 
    conda install nbconvert
    
  2. XeTeX: Konwertuj ipynb do formatu .tex, a następnie konwertuj do formatu PDF.

    sudo apt-get install texlive-xetex
    

Następnie możesz użyć poniższego polecenia, aby przekonwertować na pdf,

ipython nbconvert --to pdf YOURNOTEBOOK.ipynb

Jeśli to nie zadziała, zainstaluj pandoc i spróbuj ponownie.

sudo apt-get install pandoc
Pritesh Gohil
źródło
0

Dla użytkowników Ubuntu odpowiedź można znaleźć tutaj . Cytuję również:

Najbardziej prawdopodobną przyczyną jest to, że nie zainstalowałeś odpowiednich zależności. Twój system Ubuntu musi mieć zainstalowane pakiety dotyczące konwersji plików LaTeX i XeTeX, aby zapisać twój notatnik jako PDF. Możesz je zainstalować przez:

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

Jest to również nbconvertinna zależność, która jest zwykle instalowana automatycznie za pomocą jupyter. Ale możesz go zainstalować dla pewności, mając aktywowane środowisko wirtualne:

pip install -U nbconvert
pgmank
źródło
0

Miałem problemy z poprawnym wyświetlaniem niektórych symboli przy regularnym pobieraniu w formacie PDF . Pobrałem więc jako tex jupyter nbconvert --to latex "my notebook.ipynb", trochę poprawiłem w notatniku (na przykład w moim przypadku potrzebowałem tych wierszy dla mojego języka

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

), a następnie wyeksportowano do pliku PDF z rozszerzeniem latex --output-format=pdf "my notebook.tex".

Ale w końcu jednak, aby zachować te same znaki, jak widać w przeglądarce I skończyło się moje drukowanie przeglądarki Chrome: Ctrl+P Print to pdf. Dodaje niepotrzebny nagłówek i stopkę, ale wszystko inne pozostaje takie, jakie jest. Koniec z błędami przetwarzania paska postępu tqdm, koniec kodu wychodzącego ze strony i tak dalej. Proste.

Lukas
źródło
0

W każdym systemie podstawowe kroki, aby poprawnie skonfigurować nbconvert do konwersji notebooków ipython do formatu PDF / Latex są

  1. Zainstaluj nbconvert
  2. Zainstaluj pandoc
  3. Zainstaluj Texlive

Instalowanie nbconvert

pip install nbconvert

lub conda install nbconvert

Instalowanie pandoc

sudo apt-get install pandoc dla Ubuntu

lub sudo yum install pandocdla CentOS

dla innych odwiedź instalację pandoc

Instalowanie texlive

Możesz zainstalować zalecane pakiety lub przeprowadzić pełną instalację. W przypadku Ubuntu

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

`

Dla innych i dla pełnej instalacji texlive postępuj zgodnie z instrukcjami podanymi przy holowaniu zgodnie z twoim systemem i wyborem.

Pobrałem plik tar.gz z tug-texlive-download i postępowałem zgodnie z instrukcjami podanymi w TeX Live - Szybka instalacja . Podsumowanie instrukcji montażu:

  1. Sprzątać

    rm -rf /usr/local/texlive/2019

    rm -rf ~/.texlive2019

  2. Uruchom instalator

    rozpakuj plik zip

    cd /your/unpacked/directory

    perl install-tl

    Wpisz polecenie: i

  3. Ustawienie ścieżki

    sudo vi /etc/bash.bashrc i włóż

    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. Ustawianie domyślnego rozmiaru papieru

    tlmgr paper letter

Polecenia mogą się różnić w zależności od systemu, ale podstawowe kroki pozostają takie same.

Manojk07
źródło
0

Miałem ten błąd w Windows 10. Wykonałem te trzy kroki i rozwiązałem mój problem:

  1. Zainstaluj nbconvert

    pip zainstaluj nbconvert

  2. Zainstaluj pandoc

https://pandoc.org/installing.html

  1. Zainstaluj miktex

https://miktex.org/download


Dobrze jest też zaktualizować biblioteki:

pip install jupyter --upgrade
pip install --upgrade --user nbconvert
mah65
źródło