Jak przekonwertować notatniki IPython do formatu PDF i HTML?

89

Chcę przekonwertować moje notatniki ipython, aby je wydrukować, lub po prostu wysłać je w formacie html. Zauważyłem, że istnieje już narzędzie do tego, nbconvert . Chociaż go pobrałem, nie mam pojęcia, jak przekonwertować notebook, z nbconvert2.py, ponieważ nbconvert mówi, że jest przestarzały. nbconvert2.py mówi, że potrzebuję profilu do konwersji notebooka, co to jest? Czy istnieje dokumentacja dotycząca tego narzędzia?

nunzio13n
źródło

Odpowiedzi:

96

Jeśli masz zainstalowany LaTeX, możesz pobrać jako PDF bezpośrednio z notatnika Jupyter za pomocą Plik -> Pobierz jako -> PDF przez LaTeX (.pdf) . W przeciwnym razie wykonaj te dwa kroki.

  1. W przypadku danych wyjściowych HTML należy teraz użyć Jupyter zamiast IPython i wybrać Plik -> Pobierz jako -> HTML (.html) lub uruchomić następujące polecenie:

    jupyter nbconvert --to html notebook.ipynb  
    

    Spowoduje to przekonwertowanie pliku dokumentu Jupyter notebook.ipynb na format wyjściowy html.

    Google Colaboratory to bezpłatne środowisko notebooków Jupyter firmy Google, które nie wymaga konfiguracji i działa całkowicie w chmurze. Jeśli używasz Google Colab, polecenia są takie same, ale Google Colab umożliwia pobieranie tylko formatów .ipynb lub .py.

  2. Przekonwertuj plik html notebook.html na plik pdf o nazwie notebook.pdf. W systemie Windows, Mac lub Linux zainstaluj wkhtmltopdf . wkhtmltopdf to narzędzie wiersza poleceń służące do konwersji html na pdf za pomocą WebKit. Możesz pobrać wkhtmltopdf z połączonej strony internetowej lub w wielu dystrybucjach Linuksa można go znaleźć w ich repozytoriach.

    wkhtmltopdf notebook.html notebook.pdf   
    

Oryginalna (obecnie prawie przestarzała) wersja: przekonwertuj plik notatnika IPython do formatu html.

ipython nbconvert --to html notebook.ipynb

karel
źródło
1
Wszystko zwaliło się na jedną stronę -__-
htafoya
2
Do wyjścia HTML należy teraz użyć jupyterzamiast ipythonnp.jupyter nbconvert --to html notebook.ipynb
AlexG
Aby to zadziałało, należy zainstalować jupyter_contrib_nbextensions .
CharlesG
Zgodnie z powyższą odpowiedzią potrzebujesz wkhtmltopdf. Aby zainstalować go w systemie
Pradeep Singh
3
Możesz także wydrukować stronę internetową w formacie PDF.
AndiCover
17

Z dokumentów :

Jeśli chcesz udostępnić innym statyczny widok HTML lub PDF swojego notatnika, użyj przycisku Drukuj. Spowoduje to otwarcie statycznego widoku dokumentu, który można wydrukować do pliku PDF za pomocą funkcji systemu operacyjnego lub zapisać do pliku za pomocą opcji „Zapisz” w przeglądarce internetowej (pamiętaj, że zazwyczaj spowoduje to utworzenie zarówno pliku html, jak i katalogu o nazwie notebook_name_files obok niego, który zawiera wszystkie niezbędne informacje o stylu, więc jeśli zamierzasz to udostępnić, musisz wysłać katalog wraz z głównym plikiem html).

korzeń
źródło
1
Dziękuję Ci! Wersja HTML jest naprawdę dobra i bardzo prosta do uzyskania. Jednak plik PDF nie jest dobry, wykresy są cięte na dwie części, jeśli znajdują się między dwiema stronami, a długa linia kodu jest również cięta.
nunzio13n
@ nunzio13n - Cóż, przynajmniej masz HTML ... Nie używałem, nbconvrtwięc nie mogę Ci w tym pomóc. Mam nadzieję, że ktoś, kto przyjdzie ...
korzeń
3
Martwy link. Nie mam też przycisku drukowania w moim notebooku.
Pat
Korzystanie z funkcji drukowania w przeglądarce za pomocą CTRL+ Pdziała.
Levi Baguley
13

nbconvert nie został jeszcze w pełni zastąpiony przez nbconvert2, nadal możesz go używać, jeśli chcesz, w przeciwnym razie usunęlibyśmy plik wykonywalny. To tylko ostrzeżenie, że nie naprawiamy już błędów nbconvert1.

Powinno działać:

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

Jeśli używasz wystarczająco najnowszej wersji IPythona, nie używaj widoku drukowania, po prostu użyj normalnego okna dialogowego drukowania. Wykres wycinany w chrome jest znanym problemem (Chrome nie obsługuje niektórych wydruków CSS) i działa znacznie lepiej z Firefox, nie wszystkie wersje nadal.

Jeśli chodzi o nbconvert2, nadal jest wysoce deweloperskie i dokumentacja wymaga napisania.

Nbviewer używa nbconvert2, więc jest całkiem przyzwoity z HTML.

Lista aktualnie dostępnych profili:

$ 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

Podaj istniejące profile. (Możesz stworzyć swój własny, patrz przyszły dokument, ./nbconvert2.py --help-allpowinien dać ci jakąś opcję, której możesz użyć w swoim profilu.)

następnie

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

I powinien zapisywać twoje pliki (tex) tak długo, jak wyodrębnione figury w cwd. Tak, wiem, że to nie jest oczywiste i prawdopodobnie to się zmieni, stąd brak doc ...

Powodem tego jest to, że nbconvert2 będzie głównie biblioteką Pythona, w której w pseudokodzie możesz:

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

Punkt wejścia pojawi się później, po ustabilizowaniu API.

Zaznaczę tylko, że @jdfreder (profil github) pracuje nad eksportem tex / pdf / sphinx i jest ekspertem w generowaniu plików PDF z pliku ipynb w momencie pisania tego tekstu.

Matt
źródło
Dziękuję, wyjaśniłeś więcej moich wątpliwości. Ale nadal nbconvert2.py nie działa, ponieważ potrzebuje nawet pliku [NbconvertApp] Config file for profile './profile/latex_base.nbcv' not found, giving upkonfiguracyjnego A nbconvert nie daje mi bezpośrednio pliku pdf, ale plik lateksowy i muszę przetworzyć plik * .tex za pomocą pdflatex, ale tak jest dobre rozwiązanie.
nunzio13n
Czy możesz otworzyć problem na githubie, a my to rozwiążemy.
Matt
Prawdopodobnie nie jest to kwestia nbconvert, ale wynika to z mojego braku wiedzy na temat. Być może kiedy dokumentacja wyjdzie, wszystko będzie jasne, ipython z notebookiem i nbconvert to bardzo fajna robota i jestem pewien, że wkrótce będzie to dokumentacja.
nunzio13n
Wydaje się, że traci / nie daje żadnej numeracji ipython (mieliśmy nadzieję, że zostanie przekonwertowany przy użyciu dyrektywy ipython).
Andy Hayden,
Czy istnieje wersja API, która to umożliwi? Widzę, że jest IPython.nbconvert.exporters.latexi zastanawiam się, czy istnieje sposób na uzyskanie z tego wyniku PDF bez narzędzia wiersza poleceń. Jakie są również zależności, aby to zadziałało? (pandoc, tetex, inne rzeczy?) I zakładam, że nie jest to platforma wieloplatformowa (nie będzie działać w systemie Windows). TIA!
IanSR
11

Przekaż również --executeflagę, aby uzyskać dane wyjściowe

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

Najlepszą praktyką jest trzymanie danych wyjściowych poza notatnikiem w celu kontroli wersji, zobacz: Używanie notebooków IPython pod kontrolą wersji

Ale jeśli nie przejdziesz --execute, dane wyjściowe nie będą obecne w HTML, zobacz także: Jak uruchomić notatnik Jupyter .ipynb z terminala?

Dla fragmentu HTML bez nagłówka: Jak wyeksportować notatnik IPython do formatu HTML na potrzeby posta na blogu?

Przetestowano w Jupyter 4.4.0.

Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
źródło
9

Dla tych, którzy nie mogą zainstalować wkhtmltopdf w swoich systemach, jeszcze jedną metodą, inną niż wiele wspomnianych już w odpowiedziach na to pytanie, jest po prostu pobranie pliku jako plik html z notatnika jupyter, przesłanie go do HTML do PDF i pobranie przekonwertowane pliki pdf z tego miejsca.

Tutaj masz swój notatnik IPython (.ipynb) przekonwertowany do obu formatów PDF (.pdf) i HTML (.html).

Shayan Shafiq
źródło
8
  1. Zapisz jako HTML ;
  2. Ctrl+ P;
  3. Zapisz jako PDF .
סטנלי גרונן
źródło
4

Tylko ta odpowiedź byłaby przydatna, jeśli w swoim dokumencie masz matematyczne, naukowe formuły. Nawet jeśli ich nie masz, działa dobrze.

Sposób GUI

  • otwórz notatnik jupyter otwórz notatnik jupyter
  • Przejdź do Pliki> Pobierz jako> HTML lub PDF przez LaTeX Przejdź do Pliki> Pobierz jako> HTML lub PDF przez LaTeX

  • Następnie poszukaj pliku w folderze Pobrane. PS: Jeśli LaTeX miał jakieś błędy podczas kompilacji pliku PDF, nie powiedzie się. Jeśli tak się stanie, pobierz plik HTML, a następnie skorzystaj z witryny http://webpagetopdf.com/ lub innej podobnej usługi, aby przekonwertować kod HTML na PDF.

Sposób wiersza poleceń

  • Otwórz terminal
  • Przejdź do folderu zawierającego notatnik jupyter
  • wpisz „jupyter nbconvert --to pdf your_jupyter_notebook.ipynb” PS: Jeśli to się nie powiedzie, wypróbuj odpowiedź Yogesh
Tejas Shetty
źródło
4

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 to nie działa z jakiegokolwiek powodu, możesz spróbować w inny sposób.
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
3

Nie mogę jeszcze uruchomić pliku PDF. Dokumentacja sugeruje, że powinienem być w stanie zmusić go do pracy z lateksem, więc może mój lateks nie działa. 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.

Jednak HTML działa świetnie przy użyciu „slajdów” i jest piękny! $ ipython nbconvert --to slides myfile.ipynb ... [NbConvertApp] Writing 215220 bytes to myfile.slides.html

// Aktualizacja 2014-11-07Fri .: Składnia IPython v3 jest inna, jest prostsza; $ ipython nbconvert --to PDF myfile.ipynb We wszystkich przypadkach wydaje się, że brakowało mi biblioteki „pdflatex”. Badam to.

AnneTheAgile
źródło
try: $ ipython nbconvert your_file.ipynb --to latex --post PDF
moldovean
ty @moldovean za wezwanie mnie do ponownego przyjrzenia się temu. Więcej googlowania właśnie ujawniło problem. Kolejność argumentów nie miała znaczenia, nadal otrzymałem komunikat „Nie ma takiego pliku lub katalogu”.
AnneTheAgile
to ciekawa kwestia. Może ... tylko może ponowna instalacja ipythona pomoże .. Naprawdę nie wiem :(
moldovean
@moldovean, okazuje się, że niektóre biblioteki są wymagane, ale nie są instalowane przez ipynb. W tym przypadku potrzebuję przynajmniej pdflatex na mojej ścieżce. Zobacz mój PR, aby poprawić sprawdzanie błędów, github.com/ipython/ipython/pull/6884
AnneTheAgile
3

Możesz to zrobić, najpierw konwertując notatnik do formatu HTML, a następnie do formatu PDF:

Kolejne kroki, które wdrożyłem na: OS: Ubuntu, notebook Anaconda-Jupyter, Python 3

1 Zapisz notatnik w formacie HTML:

  1. Uruchom notatnik jupyter, który chcesz zapisać w formacie HTML. Najpierw zapisz notatnik poprawnie, aby plik HTML zawierał najnowszą zapisaną wersję twojego kodu / notatnika.

  2. Uruchom następujące polecenie z samego notatnika:

    !jupyter nbconvert --to html your_notebook_name.ipynb

Po wykonaniu utworzy wersję HTML twojego notatnika i zapisze ją w bieżącym katalogu roboczym. Zobaczysz, że jeden plik html zostanie dodany do bieżącego katalogu o your_notebook_name.htmlnazwie

( your_notebook_name.ipynb-> your_notebook_name.html).

2 Zapisz html jako PDF:

  1. Teraz otwórz ten your_notebook_name.htmlplik (kliknij go). Otworzy się w nowej karcie przeglądarki.
  2. Teraz przejdź do opcji drukowania. Stąd możesz zapisać ten plik w formacie pdf.

Zauważ, że z opcji drukowania mamy również swobodę wyboru fragmentu notatnika do zapisania w formacie pdf.

Yogesh
źródło
2

Szukałem sposobu na zapisanie notatników w formacie html, ponieważ za każdym razem, gdy próbuję pobrać jako html z moją nową instalacją Jupyter, zawsze pojawia się 500 : Internal Server Error The error was: nbconvert failed: validate() got an unexpected keyword argument 'relax_add_props'błąd. Co dziwne, odkryłem, że pobieranie w formacie html jest tak proste, jak:

  1. Kliknij lewym przyciskiem myszy w notatniku
  2. Kliknij „Zapisz jako ...” w menu rozwijanym
  3. Zapisz odpowiednio

Bez podglądu wydruku, bez wydruku, bez nbconvert. Korzystanie z Jupyter Version: 1.0.0. To tylko sugestia, aby spróbować (oczywiście nie wszystkie konfiguracje są takie same).

semore_1267
źródło
2

Uważam, że najłatwiejszą metodą konwersji notebooka znajdującego się w sieci do formatu PDF jest najpierw wyświetlenie go w serwisie internetowym nbviewer . Następnie możesz wydrukować go do pliku pdf. Jeśli notatnik znajduje się na dysku lokalnym, najpierw prześlij go do repozytorium github i użyj jego adresu URL dla nbviewer.

hlkw
źródło
2

Inne sugerowane podejścia:

  1. Korzystając z opcji „Drukuj, a następnie wybierz Zapisz jako PDF”. z pliku HTML spowoduje utratę krawędzi krawędzi, podświetlanie składni, przycinanie wykresów itp.

  2. Niektóre inne biblioteki okazały się zepsute, jeśli chodzi o używanie przestarzałych wersji.

Rozwiązanie: Lepszą, bezproblemową opcją jest użycie internetowego konwertera https://www.sejda.com/html-to-pdf, który konwertuje wersję * .html twojego * .ipynb na * .pdf.

Kroki:

  1. Najpierw z interfejsu notebooka Jupyter przekonwertuj plik * .ipynb na * .html za pomocą

Plik> Pobierz jako> HTML (.html)

  1. Prześlij nowo utworzony plik * .html do https://www.sejda.com/html-to-pdf a następnie wybierz opcję HTML to PDF.

  2. Twój plik pdf jest teraz gotowy do pobrania.

  3. Masz teraz pliki .ipynb, .html i .pdf

Saurabh Jain
źródło
2

Połączyłem kilka odpowiedzi powyżej w wbudowanym Pythonie, który możesz dodać do ~ / .bashrc lub ~ / .zshrc, aby skompilować i przekonwertować wiele notatników do jednego pliku 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 * 
}
partizanos
źródło
2

Zwykła wersja Pythona odpowiedzi Partizanosa .

  • otwórz Terminal (Linux, MacOS) lub przejdź do miejsca, w którym możesz uruchamiać pliki Pythona w systemie Windows
  • Wpisz następujący kod w pliku .py (na przykład tejas.py)
import os

[os.system("jupyter nbconvert --to pdf " + f) for f in os.listdir(".") if f.endswith("ipynb")]
  • Przejdź do folderu zawierającego notatniki jupyter
  • Upewnij się, że plik tejas.py znajduje się w bieżącym folderze. W razie potrzeby skopiuj go do bieżącego folderu.
  • wpisz „python tejas.py”
  • Zadanie wykonane
Tejas Shetty
źródło
Użycie --template reportjako dodatkowej opcji kompiluje również ToC do wynikowego pliku PDF, pobierając różne nagłówki przecen w notatniku.
Stefan
2

notebook-as-pdfInstall

python -m pip install 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
Dziękuję, to zadziałało dobrze. Po raz pierwszy wypróbowałem to w środowisku Python 3.6.8, ale napotkałem kilka problemów. Następnie zaktualizowałem do środowiska Python 3.7.8 opartego na Conda i działało jak Urok.
mastDrinkNimbuPani
Dzieje się tak, ponieważ asyncio jest zależnością pakietu, a gdzieś w kodzie znajduje się asyncio.run, która jest metodą tylko w wersji 3.7.
mastDrinkNimbuPani
0

Myślę, że najprostszy sposób to „Ctrl + P”> zapisz jako „pdf”. Otóż ​​to.

rishikeshF
źródło
To pokaże bloki kodu
Dani LA