IPython / Jupyter Problemi durante il salvataggio del notebook come PDF


88

Quindi, ho provato a salvare un taccuino Jupyter come PDF ma non riesco a capire come farlo. La prima cosa che provo è dal menu file scarica come PDF, ma in questo modo si ottiene:

nbconvert failed: PDF creating failed

la prossima cosa che provo è provare a fare la conversione dal prompt dei comandi in questo modo

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

ma ancora, questo si traduce in un messaggio di errore

ImportError: No module named 'PDF'

e se ci provo

$ ipython nbconvert --to latex MyNotebook.ipynb 

questo risulta in

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

se provo a installare pandoc ( pip install pandoc), questo mi dà

ImportError: No module named 'ConfigParser'

ed è qui che rimango bloccato perché non so cos'altro fare. Qualcuno ha idea di come riparare ciò che non va?


2
la creazione di pdf richiede dipendenze non pitoniche (cioè pandoce latex)
cel

4
Ciò significa che devi installarli prima di poter utilizzare questa funzione. E non sono pacchetti Python, quindi non puoi usare pip.
cel

1
pandoc è scritto in Haskell.
Thomas K

Risposte:


34

Per farlo funzionare, ho installato latex, il tipico latex extra e pandoc.

Con Ubuntu:

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

ci vuole del tempo: diversi 100 Mb per il download. Ho letto da qualche parte che puoi usare --no-install-recommendsper texlive ed extra per ridurre al dl.


9
Il mio richiesto pandoce texlive-xetex.
douggard

Ho trovato un elenco più piccolo di pacchetti su ask_ubuntu .
Eric Duminil

2
Avevo bisogno anche texlive-generic-extradi risolvere questo problema , a parte texlive-xetexquello suggerito da @douggard.
pgmank

Grazie mille che è stato di grande aiuto :)
farnaz jazayeri

30

Se sei su un Mac e hai installato Homebrew, apri una shell del terminale e installa pandoc digitando il comando:

brew install pandoc

sii paziente, il tempo per l'installazione e la compilazione può richiedere del tempo su connessioni Internet lente o sistemi meno recenti.


3
Funzionava su OS X 10.10. Ora posso convertire in LaTeX e PDF. (La mia installazione su pandoc ha richiesto meno di un minuto ... devo aver già avuto la maggior parte dei componenti sul mio sistema.) GRAZIE!
drpetermolnar

1
@drpetermolnar Questo ha funzionato anche per me (OSX 10.11.6). Ci sono voluti 2 minuti.
timothyjgraham

1
@Akshay, il comando è: ipython nbconvert --to PDF <il tuo notebook> .ipynb
Andrea

@AndreaNalon Il comando di cui sopra non funziona, stackoverflow.com/questions/43247818/...
Akshay Khale

Per OSX 10.13.06 ho dovuto fare: brew install pandoce brew cask install mactex-no-gui.
bue

12

2015-4-22: Sembra che un aggiornamento IPython significhi che --to pdfdovrebbe essere usato al posto di --to latex --post PDF. C'è un problema correlato a Github .


10

Per convertire i taccuini in PDF devi prima avere installato nbconvert.

pip install nbconvert
# OR
conda install nbconvert

Successivamente, se non stai usando Anaconda o non lo hai già fatto, devi installare pandoc seguendo le istruzioni sul loro sito web o, su Linux, come segue:

sudo apt-get install pandoc

Dopodiché devi avere XeTex installato sulla tua macchina:

È ora possibile accedere alla cartella che contiene il notebook IPython ed eseguire il seguente comando:

jupyter nbconvert --to pdf MyNotebook.ipynb

per ulteriore riferimento, controlla questo link .


4

Come dicono i commenti alla domanda, avrai bisogno di pandoc e latex (es. TeXShop). Ho installato pandoc con Homebrew, ci è voluto solo un secondo. Avendo pandoc e TeXShop, potrei generare latex ma non pdf (sulla riga di comando).

ipython nbconvert --to latex mynotebook.ipynb

Esplorando il file latex (.tex) con TeXShop, l'errore era dovuto alla mancanza di fogli di stile e def. Dopo aver installato tutti questi (Adjustbox.sty, adjcalc.sty, trimclip.sty, collectbox.sty, tc-pgf.def, ucs.sty, uni-global.def, utf8x.def, ucsencs.def), finalmente è stato fatto lavoro.

Tuttavia, il risultato sembra un po 'troppo eccentrico per i miei gusti. Peccato che la stampa dell'html da Safari perda la colorazione della sintassi. Altrimenti, non sembra così male. (Questo è tutto su OS X).


1
La breve riga seguente ha generato direttamente un file PDF senza lasciare alcun file intermedio creato tramite la compilazione. jupyter nbconvert --to pdf filename.ipynb
llinfeng,

Almeno ora hanno una correzione per la stampa con il colore in modo che la stampa dell'HTML direttamente in PDF sia meno dannosa: github.com/jupyter/notebook/issues/840
flutefreak7

3

Questo script Python ha una GUI per selezionare con explorer un Ipython Notebook che vuoi convertire in pdf. L'approccio con wkhtmltopdf è l'unico che ho trovato funziona bene e fornisce pdf di alta qualità. Altri approcci descritti qui sono problematici, l'evidenziazione della sintassi non funziona oi grafici sono confusi.

Dovrai installare wkhtmltopdf: http://wkhtmltopdf.org/downloads.html

e Nbconvert

pip install nbconvert
# OR
conda install nbconvert

Script 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()

lo script è un po 'lungo per una risposta di stackoverflow davvero, e avvolge solo wkhtml. Penso che la risposta sarà più chiara se metti solo le opzioni della riga di comando per wkhtml e un esempio.
Hugh Perkins

quindi fondamentalmente, stai usando nbconvertper esportare in html, quindi usando wkhtmltopdfper convertire in pdf. ma questo non è chiaro dalla tua risposta :-)
Hugh Perkins

Quindi, ho provato questo. È effettivamente meglio che esportare direttamente in pdf. Stranamente, alcuni dei miei mathjax sono renderizzati correttamente (all'inizio del documento), e poi interrompe il rendering, circa 12 pagine nel documento, senza una ragione ovvia.
Hugh Perkins

3

Sto usando Anaconda-Jupyter Notebook su OS: Ubuntu 16.0 per la programmazione Python.

Installa Nbconvert, Pandoc e Tex:

Apri un terminale e implementa i seguenti comandi in esso.

Installa Nbconvert: sebbene faccia parte dell'ecosistema Jupyter, installalo ancora una volta

$conda install nbconvert

O

$pip install nbconvert

Ma ti consiglio di usare conda invece di pip se stai usando anaconda

Installa Pandoc: poiché Nbconvert utilizza Pandoc per convertire il markdown in formati diversi dall'HTML. Digita il seguente comando

$sudo apt-get install pandoc

Installa TeX: per la conversione in PDF, nbconvert usa TeX. Digita il seguente comando

$sudo apt-get install texlive-xetex

Dopo l'esecuzione di questi comandi, chiudere i notebook aperti, aggiornare la home page o riavviare il kernel del notebook aperto. Ora prova a scaricare il taccuino come pdf :)

Nota: per maggiori dettagli, fare riferimento alla documentazione ufficiale:
https://nbconvert.readthedocs.io/en/latest/install.html


2

Per convertire qualsiasi notebook Jupyter in PDF, segui le istruzioni seguenti:

( Entra nel taccuino Jupyter ):

Su Mac OS :

comando + P -> otterrai una finestra di dialogo di stampa -> cambia destinazione come PDF -> fai clic su stampa

Su Windows :

Ctrl + P -> otterrai una finestra di dialogo di stampa -> cambia destinazione come PDF -> fai clic su stampa

Se i passaggi precedenti non generano il PDF completo del notebook Jupyter (probabilmente perché Chrome, alcune volte, non stampa tutti gli output perché Jupyter fa uno scroll per grandi output),

Prova a eseguire i passaggi seguenti per rimuovere lo scorrimento automatico nel menu : -

Crediti: @ ÂngeloPolotto

  1. Nel tuo Jupyter Notebook, fai clic su Cella nella parte superiore del Jupyter Notebook inserisci qui la descrizione dell'immagine

  2. Quindi fai clic su Tutto l'output -> Attiva / disattiva lo scorrimento per rimuovere lo scorrimento automatico.

inserisci qui la descrizione dell'immagine


Sono d'accordo, ma Chrome, a volte, non stampa tutti gli output perché Jupyter fa uno scroll per grandi output. È necessario rimuovere lo scorrimento automatico nel menu Cella-> Tutti gli output-> Toggle Scrolling (riferimento: stackoverflow.com/a/52803744/6846888 )
Ângelo Polotto

Puoi aggiungere queste informazioni nella tua risposta? Questo può essere molto utile per più utenti.
Ângelo Polotto

1
Sì @ ÂngeloPolotto, ho aggiunto le tue informazioni nella mia risposta.
MobileDev

1

Questo problema è stato riscontrato sia con Ubuntu che con Mac OSX. Dopo una serie frenetica di ricerche e prove, entrambi furono risolti. Ciò richiede sia texe pandoc; entrambi i programmi esterni jumbo non possono essere installati da Python pip.

Mac OSX: utilizzando MacPorts l'installazione di pandoc

port install pandoc

Questo dovrebbe richiedere quasi un'ora per completare (nel solito caso). Se il problema persiste, potresti dover installare la distribuzione MacTeX. di TeXLive.

Per Ubuntu: installa vanilla TeXLive dal programma di installazione di rete , non tramite apt-get . Quindi installa pandoc usando apt-get.

sudo apt-get install pandoc

Un'installazione completa di TeXLive richiederebbe fino a 4,4 GB su disco.

Per evitare tutti questi problemi, il modo consigliato per utilizzare IPython / Jupyter Notebook sarebbe installare la distribuzione Anaconda Python.


1

Ho avuto anche tutti i tipi di problemi a capirlo. Non so se fornirà esattamente ciò di cui hai bisogno, ma ho scaricato il mio taccuino come file HTML, quindi l'ho estratto nel mio browser Chrome e poi l'ho stampato come file PDF, che ho salvato. Ha catturato tutto il mio codice, testo e grafici. Era abbastanza buono per quello di cui avevo bisogno.


1
Nel mio caso, l'html inserisce una cella per pagina anche se è troppo lunga. Quindi non una soluzione
Juh_

1

Se stai usando la versione cloud di sagemath , puoi semplicemente andare nell'angolo sinistro,
selezionare File -> Scarica come -> Pdf tramite 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 e poi sull'anteprima
fare clic con il tasto destro del mouse -> Stampa e quindi selezionare salva come pdf.


E se ciò non funziona, puoi utilizzare direttamente nbconvert sulla riga di comando e vedere esattamente cosa sta causando problemi con il lattice.
William Stein

1

In qualità di membro nuovo di zecca, non sono stato in grado di aggiungere semplicemente un commento al post, ma voglio dire che la soluzione offerta da Phillip Schwartz ha funzionato per me. Si spera che le persone in una situazione simile cercheranno prima quel percorso con l'enfasi. Non avere interruzioni di pagina è stato un problema frustrante per un bel po 'di tempo, quindi sono grato per la discussione sopra.

Come ha detto Phillip Schwartz: "Dovrai installare wkhtmltopdf: [ http://wkhtmltopdf.org/downloads.html[1]

e Nbconvert "

Quindi aggiungi una cella del tipo "rawNBConvert" e includi:

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

Questo sembrava fare il trucco per me, e il PDF generato aveva l'interruzione di pagina nelle posizioni corrispondenti. Tuttavia, non è necessario eseguire il codice personalizzato, poiché sembra che il percorso "normale" per scaricare il notebook in HTML, aprirlo nel browser e stampare in PDF funzioni una volta installate queste utilità.


1

Per convertire .ipynb in pdf, il tuo sistema dovrebbe contenere 2 componenti,

  1. nbconvert : fa parte di jupyter e permette di convertire ipynb in pdf

    pip install nbconvert
    OR 
    conda install nbconvert
    
  2. XeTeX: converti ipynb in formato .tex e poi converti in pdf.

    sudo apt-get install texlive-xetex
    

Quindi puoi usare il comando seguente per convertire in pdf,

ipython nbconvert --to pdf YOURNOTEBOOK.ipynb

Nel caso in cui non funzioni, installa pandoc e riprova.

sudo apt-get install pandoc

1

notebook-as-pdf Installa 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

creare pdf da notebook jupyter-nbconvert-toPDF tramiteHTML


0

Quello che ho scoperto è che nbconvert / utils / pandoc.py aveva un bug di codice che ha provocato l'errore per la mia macchina. Il codice controlla se pandoc è nel percorso delle variabili ambientali. Per la mia macchina la risposta è no. Tuttavia pandoc.exe è!

La soluzione era aggiungere ".exe" al codice sulla riga 69

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

Lo stesso vale per "xelatex" non installato. Aggiungi al file nbconvert / exporters / pdf.py alla riga 94

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

0

Per gli utenti di Ubuntu, una risposta può essere trovata qui . Lo cito anche:

La causa più probabile è che non hai installato le dipendenze appropriate. Il tuo sistema Ubuntu deve avere alcuni pacchetti installati per quanto riguarda la conversione dei file LaTeX e XeTeX, al fine di salvare il tuo notebook come PDF. Puoi installarli:

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

Inoltre, nbconvertè un'altra dipendenza che di solito viene installata automaticamente con jupyter. Ma puoi installarlo solo per sicurezza, mentre il tuo ambiente virtuale è attivato:

pip install -U nbconvert

0

Ho avuto problemi a visualizzare correttamente alcuni simboli con il download regolare come pdf . Quindi scaricato come tex jupyter nbconvert --to latex "my notebook.ipynb", ho apportato alcune modifiche con il blocco note (ad esempio, nel mio caso avevo bisogno di queste righe per la mia lingua

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

) e quindi esportato in pdf con latex --output-format=pdf "my notebook.tex".

Ma alla fine, però, di mantenere gli stessi caratteri, come si vede in un browser ho finito per usare la mia stampa browser Chrome: Ctrl+P Print to pdf. Aggiunge intestazioni e piè di pagina non necessari, ma tutto il resto rimane com'è. Niente più errori nell'elaborazione della barra di avanzamento tqdm, niente più codice che esce dalla pagina e così via. Semplice come quella.


0

In qualsiasi sistema, i passaggi di base per configurare correttamente nbconvert per convertire i notebook ipython in pdf / latex sono

  1. Installa nbconvert
  2. Installa pandoc
  3. Installa Texlive

Installazione di nbconvert

pip install nbconvert

o conda install nbconvert

Installazione di pandoc

sudo apt-get install pandoc per Ubuntu

o sudo yum install pandocper CentOS

per altri visita pandoc-installation

Installazione di texlive

È possibile installare i pacchetti consigliati o l'installazione completa. Per Ubuntu

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

"

Per gli altri e per l'installazione completa di texlive segui le istruzioni fornite in tug secondo il tuo sistema e la tua scelta.

Ho scaricato il file tar.gz da tug-texlive-download e ho seguito le istruzioni fornite su TeX Live - Installazione rapida . Istruzioni di installazione in sintesi:

  1. Pulire

    rm -rf /usr/local/texlive/2019

    rm -rf ~/.texlive2019

  2. Esegui il programma di installazione

    decomprimere il file zip

    cd /your/unpacked/directory

    perl install-tl

    Immettere il comando: i

  3. Impostazione del percorso

    sudo vi /etc/bash.bashrc e inserire

    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. Impostazione del formato carta predefinito

    tlmgr paper letter

I comandi possono differire a seconda del sistema, ma i passaggi di base rimangono gli stessi.


0

Ho riscontrato questo errore in Windows 10. Ho seguito questi tre passaggi e ha risolto il mio problema:

  1. Installa nbconvert

    pip installa nbconvert

  2. Installa pandoc

https://pandoc.org/installing.html

  1. Installa miktex

https://miktex.org/download


Inoltre è bene aggiornare le librerie:

pip install jupyter --upgrade
pip install --upgrade --user nbconvert
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.