Come convertire i notebook IPython in PDF e HTML?


92

Voglio convertire i miei notebook ipython per stamparli, o semplicemente inviarli in formato html. Ho notato che esiste già uno strumento per farlo, nbconvert . Anche se l'ho scaricato, non ho idea di come convertire il notebook, con nbconvert2.py poiché nbconvert dice che è deprecato. nbconvert2.py dice che ho bisogno di un profilo per convertire il notebook, che cos'è? Esiste una documentazione su questo strumento?


Risposte:


100

Se hai LaTeX installato, puoi scaricarlo come PDF direttamente dal notebook Jupyter con File -> Scarica come -> PDF tramite LaTeX (.pdf) . Altrimenti segui questi due passaggi.

  1. Per l'output HTML, ora dovresti usare Jupyter al posto di IPython e selezionare File -> Scarica come -> HTML (.html) o eseguire il seguente comando:

    jupyter nbconvert --to html notebook.ipynb  
    

    Questo convertirà il file di documento Jupyter notebook.ipynb nel formato di output html.

    Google Colaboratory è l'ambiente notebook Jupyter gratuito di Google che non richiede configurazione e funziona interamente nel cloud. Se utilizzi Google Colab i comandi sono gli stessi, ma Google Colab ti consente solo di scaricare i formati .ipynb o .py.

  2. Converti il ​​file html notebook.html in un file pdf chiamato notebook.pdf. In Windows, Mac o Linux, installa wkhtmltopdf . wkhtmltopdf è un'utilità a riga di comando per convertire HTML in pdf utilizzando WebKit. Puoi scaricare wkhtmltopdf dalla pagina web collegata, o in molte distribuzioni Linux può essere trovato nei loro repository.

    wkhtmltopdf notebook.html notebook.pdf   
    

Revisione originale (ora quasi obsoleta): converti il ​​file notebook IPython in html.

ipython nbconvert --to html notebook.ipynb


1
Tutto era compresso in una pagina
-__-

2
Per l'output HTML, ora dovresti usare jupyteral posto di, ipythonad esempiojupyter nbconvert --to html notebook.ipynb
AlexG

Affinché funzioni, è necessario installare jupyter_contrib_nbextensions .
CharlesG

Secondo la risposta sopra è necessario wkhtmltopdf. Per installarlo in Ubuntu 14.04 questo ha funzionato per me gist.github.com/brunogaspar/bd89079245923c04be6b0f92af431c10
Pradeep Singh

4
Puoi anche stampare il sito web in un pdf.
AndiCover

18

Dai documenti :

Se desideri fornire ad altri una visualizzazione HTML o PDF statica del tuo blocco note, utilizza il pulsante Stampa. Si apre una visualizzazione statica del documento, che puoi stampare in PDF utilizzando le funzionalità del tuo sistema operativo, o salvare in un file con l'opzione 'Salva' del tuo browser web (nota che in genere, questo creerà sia un file html che una directory chiamata notebook_name_files accanto ad esso che contiene tutte le informazioni di stile necessarie, quindi se intendi condividere questo, devi inviare la directory insieme al file html principale).


1
Grazie! La versione HTML è davvero buona e molto semplice da ottenere. Tuttavia il PDF non è buono, i grafici vengono tagliati in due parti se si trovano tra due pagine e anche la lunga riga di codice viene tagliata.
nunzio13 il

@ nunzio13n - Beh, almeno hai l'html ... non l'ho usato nbconvrtquindi non posso davvero aiutarti su questo. Si spera che qualcuno che è arrivato venga ...
root

4
Collegamento morto. Inoltre, non ho alcun pulsante di stampa nel mio taccuino.
Pat

Usare la stampa nel tuo browser usando CTRL+ Pfunziona.
Levi Baguley

a) L'esportazione come HTML da Jupyter non sembra salvare immagini, b) File -> salva come modulo Firefox ti offre una pagina completamente non interattiva che mostra solo ciò che è visibile. Anche il link nel tuo post ora è morto.
jrh

13

nbconvert non è ancora completamente sostituito da nbconvert2, puoi ancora usarlo se lo desideri, altrimenti avremmo rimosso l'eseguibile. È solo un avvertimento che non correggiamo più nbconvert1.

Quanto segue dovrebbe funzionare:

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

Se sei su una versione IPython abbastanza recente, non usare la visualizzazione di stampa, usa semplicemente la normale finestra di dialogo di stampa. Il grafico tagliato in Chrome è un problema noto (Chrome non rispetta alcuni CSS di stampa) e funziona molto meglio con Firefox, non tutte le versioni ancora.

Per quanto riguarda nbconvert2, è ancora necessario scrivere molto dev e documenti.

Nbviewer usa nbconvert2 quindi è abbastanza decente con HTML.

Elenco dei profili attualmente disponibili:

$ 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

Darti i profili esistenti. (Puoi crearne uno tuo, cf future doc, ./nbconvert2.py --help-alldovrebbe darti qualche opzione che puoi usare nel tuo profilo.)

poi

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

E dovrebbe scrivere i tuoi file (tex) fintanto che le cifre estratte in cwd. Sì, lo so che questo non è ovvio e probabilmente cambierà quindi nessun documento ...

La ragione di ciò è che nbconvert2 sarà principalmente una libreria python in cui nello pseudo codice puoi fare:

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

Il punto di ingresso arriverà più tardi, una volta stabilizzata l'API.

Faccio solo notare che @jdfreder (profilo github) sta lavorando all'esportazione di tex / pdf / sphinx ed è l'esperto per generare PDF da file ipynb al momento della stesura di questo documento.


Grazie, hai chiarito di più i miei dubbi. Ma ancora nbconvert2.py non funziona, perché ha bisogno anche di un file Config [NbconvertApp] Config file for profile './profile/latex_base.nbcv' not found, giving upE nbconvert non mi dà direttamente un file pdf, ma un file latex, e devo elaborare il file * .tex con pdflatex, ma lo è una buona soluzione.
nunzio13 il

Puoi aprire un problema su GitHub e lo risolveremo.
Matt

Probabilmente non è un problema di nbconvert ma è dovuto alla mia mancanza di conoscenza. Forse quando uscirà la documentazione sarà tutto chiaro, ipython con il notebook e nbconvert sono un lavoro molto carino e sono sicuro che presto sarà una documentazione.
nunzio13n

Questo sembra perdere / non dare alcuna numerazione ipython (speravo che si convertisse usando la direttiva ipython).
Andy Hayden

Esiste una versione API per farlo accadere? Vedo che c'è IPython.nbconvert.exporters.latexe mi chiedo se c'è un modo per ottenere l'output PDF da questo senza lo strumento della riga di comando. Inoltre, quali sono le dipendenze per farlo funzionare? (pandoc, tetex, altre cose?) E presumo che non sia multipiattaforma (non funzionerà su Windows). TIA!
IanSR

12

Passa anche il --executeflag per ottenere l'output

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

La procedura migliore è mantenere l'output fuori dal notebook per il controllo della versione, vedere: Utilizzo di notebook IPython sotto il controllo della versione

Ma poi, se non lo passi --execute, l'output non sarà presente nell'HTML, vedi anche: Come eseguire un Jupyter Notebook .ipynb dal terminale?

Per un frammento HTML senza intestazione: come esportare un notebook IPython in HTML per un post sul blog?

Testato in Jupyter 4.4.0.



9

Per coloro che non possono installare wkhtmltopdf nei propri sistemi, un metodo in più oltre a molti già menzionati nelle risposte a questa domanda è semplicemente scaricare il file come file html dal quaderno jupyter, caricarlo in HTML in PDF e scaricarlo i file pdf convertiti da lì.

Qui hai il tuo notebook IPython (.ipynb) convertito in entrambi i formati PDF (.pdf) e HTML (.html).


4

Solo questa risposta ti sarebbe utile se hai formule matematiche e scientifiche nel tuo documento. Anche se non li hai funziona bene.

Modo GUI

  • apri il taccuino jupyter apri il taccuino jupyter
  • Vai a File> Scarica come> HTML o PDF tramite LaTeX Vai a File> Scarica come> HTML o PDF tramite LaTeX

  • Quindi controlla la cartella Download per il file. PS: se LaTeX ha riscontrato errori durante la compilazione del PDF, non funzionerà. In tal caso, scarica il file HTML e quindi utilizza http://webpagetopdf.com/ o qualsiasi altro servizio simile per convertire l'HTML in PDF.

Modo da riga di comando

  • Apri il terminale
  • Accedi alla cartella contenente il taccuino jupyter
  • digita "jupyter nbconvert --to pdf your_jupyter_notebook.ipynb" PS: Se fallisce, prova la risposta di Yogesh

4

Se stai usando la versione cloud di sagemath , puoi semplicemente andare nell'angolo sinistro,
selezionare File → Scarica come → Pdf via LaTeX (.pdf)
Controlla lo screenshot se vuoi.
Screenshot Converti ipynb in pdf

Se per qualsiasi motivo non funziona, puoi provare in un altro modo.
selezionare File → Anteprima di stampa, quindi
fare clic con il pulsante destro del mouse sull'anteprima → Stampa e selezionare Salva come pdf.


3

Non riesco ancora a far funzionare il pdf. I documenti implicano che dovrei essere in grado di farlo funzionare con il lattice, quindi forse il mio lattice non funziona. 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.

Tuttavia, l'HTML funziona alla grande usando le "diapositive" ed è bellissimo! $ ipython nbconvert --to slides myfile.ipynb ... [NbConvertApp] Writing 215220 bytes to myfile.slides.html

// Aggiornamento 2014-11-07Fri .: La sintassi di IPython v3 è diversa, è più semplice; $ ipython nbconvert --to PDF myfile.ipynb In tutti i casi, sembra che mi mancasse la libreria "pdflatex". Sto indagando su questo.


provare: $ ipython nbconvert your_file.ipynb --to lattice --post PDF
moldovean

ty @moldovean per avermi chiesto di dare un'altra occhiata a questo. Altre ricerche su Google hanno appena rivelato il problema. L'ordine degli argomenti non ha importanza, ho ancora "Nessun file o directory di questo tipo".
AnneTheAgile

questo è un problema interessante. Forse ... forse solo reinstallare ipython aiuterà .. Davvero non lo so :(
moldavo

@moldovean, risulta che alcune librerie sono richieste ma non installate da ipynb. In questo caso ho bisogno almeno di pdflatex sul mio percorso. Vedi il mio PR per migliorare il controllo degli errori, github.com/ipython/ipython/pull/6884
AnneTheAgile

3

Puoi farlo convertendo prima il taccuino in HTML e poi in formato PDF:

I seguenti passaggi ho implementato su: Sistema operativo: Ubuntu, Anaconda-Jupyter notebook, Python 3

1 Salva blocco note in formato HTML:

  1. Avvia il taccuino jupyter che desideri salvare in formato HTML. Per prima cosa salva il taccuino correttamente in modo che il file HTML abbia l'ultima versione salvata del tuo codice / taccuino.

  2. Esegui il seguente comando dal notebook stesso:

    !jupyter nbconvert --to html your_notebook_name.ipynb

Dopo l'esecuzione creerà la versione HTML del tuo notebook e la salverà nella directory di lavoro corrente. Vedrai che un file html verrà aggiunto nella directory corrente con il your_notebook_name.htmlnome

( your_notebook_name.ipynb-> your_notebook_name.html).

2 Salva html come PDF:

  1. Ora apri quel your_notebook_name.htmlfile (fai clic su di esso). Verrà aperto in una nuova scheda del tuo browser.
  2. Ora vai all'opzione di stampa. Da qui puoi salvare questo file in formato pdf.

Nota che dall'opzione di stampa abbiamo anche la flessibilità di selezionare una parte di un taccuino da salvare in formato pdf.


3

Altri approcci suggeriti:

  1. Utilizzando "Stampa e quindi seleziona Salva come PDF". dal file HTML comporterà la perdita dei bordi del bordo, l'evidenziazione della sintassi, il taglio dei grafici ecc.

  2. Alcune altre librerie si sono rivelate non funzionanti quando si tratta di utilizzare versioni obsolete.

Soluzione: un'opzione migliore e senza problemi è utilizzare un convertitore online che convertirà la versione * .html del tuo * .ipynb in * .pdf.

Passaggi:

  1. Innanzitutto, dall'interfaccia del tuo notebook Jupyter, converti il ​​tuo * .ipynb in * .html usando:

File> Scarica come> HTML (.html)

  1. Carica qui il file * .html appena creato, quindi seleziona l'opzione HTML in PDF.

  2. Il tuo file pdf è ora pronto per il download.

  3. Ora hai file .ipynb, .html e .pdf


2

Ho cercato un modo per salvare i taccuini come html, poiché ogni volta che provo a scaricare come html con la mia nuova installazione di Jupyter, ottengo sempre un 500 : Internal Server Error The error was: nbconvert failed: validate() got an unexpected keyword argument 'relax_add_props'errore. Stranamente, ho scoperto che il download come html è semplice come:

  1. Fare clic con il tasto sinistro nel taccuino
  2. Fai clic su "Salva con nome ..." nel menu a discesa
  3. Salva di conseguenza

Nessuna anteprima di stampa, nessuna stampa, nessuna conversione nb. Utilizzando Jupyter Version: 1.0.0. Solo un suggerimento da provare (ovviamente non tutte le configurazioni sono uguali).


2

Trovo che il metodo più semplice per convertire un notebook che si trova sul Web in pdf sia visualizzarlo prima sul servizio web nbviewer . È quindi possibile stamparlo in un file pdf. Se il notebook si trova sull'unità locale, caricalo prima su un repository GitHub e utilizza il suo URL per nbviewer.


2

Ho combinato alcune risposte sopra in python in linea che puoi aggiungere a ~ / .bashrc o ~ / .zshrc per compilare e convertire molti notebook in un singolo file 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

La semplice versione in pitone della risposta di partizanos .

  • apri Terminal (Linux, MacOS) o arriva al punto in cui puoi eseguire file python in Windows
  • Digita il codice seguente in un file .py (ad esempio tejas.py)
import os

[os.system("jupyter nbconvert --to pdf " + f) for f in os.listdir(".") if f.endswith("ipynb")]
  • Accedi alla cartella contenente i taccuini jupyter
  • Assicurati che tejas.py sia nella cartella corrente. Copiarlo nella cartella corrente, se necessario.
  • digita "python tejas.py"
  • Lavoro fatto

L'utilizzo --template reportcome opzione aggiuntiva compila anche un ToC nel pdf risultante prendendo le diverse intestazioni di markdown nel notebook.
Stefan

2

notebook-as-pdfInstall

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

Usalo

Puoi anche usarlo con nbconvert:

jupyter-nbconvert - in PDF tramite nomefile HTML.ipynb

che creerà un file chiamato nomefile.pdf.

o pip installa notebook-as-pdf

crea pdf da notebook jupyter-nbconvert-toPDF tramiteHTML


Grazie, ha funzionato bene per me. L'ho provato per la prima volta in un ambiente Python 3.6.8, ma ho riscontrato alcuni problemi. Ho quindi aggiornato a un ambiente Python 3.7.8, basato su Conda, e ha funzionato come un fascino.
mastDrinkNimbuPani

Questo perché asyncio è una dipendenza per il pacchetto e da qualche parte nel codice c'è un asyncio.run che è un metodo solo 3.7.
mastDrinkNimbuPani


0

Il modo più semplice secondo me è "Ctrl + P"> salva come "pdf". Questo è tutto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.