IPython / Jupyter Probleme beim Speichern des Notebooks als PDF


86

Also habe ich versucht, ein Jupyter-Notizbuch als PDF zu speichern, aber ich kann einfach nicht herausfinden, wie das geht. Das erste, was ich versuche, ist aus dem Dateimenü einfach als PDF herunterzuladen, aber das führt zu:

nbconvert failed: PDF creating failed

Als nächstes versuche ich, die Konvertierung von der Eingabeaufforderung wie folgt durchzuführen

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

Dies führt jedoch wiederum zu einer Fehlermeldung

ImportError: No module named 'PDF'

und wenn ich es versuche

$ ipython nbconvert --to latex MyNotebook.ipynb 

das führt zu

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

Wenn ich versuche, pandoc ( pip install pandoc) zu installieren , gibt mir das

ImportError: No module named 'ConfigParser'

und hier stecke ich fest, weil ich einfach nicht weiß, was ich sonst tun soll. Hat jemand eine Idee, wie man das Problem behebt?


2
Das Erstellen von PDFs erfordert nicht-pythonische Abhängigkeiten (dh pandocund latex)
cel

4
Das bedeutet, dass Sie sie installieren müssen, bevor Sie diese Funktion verwenden können. Und sie sind keine Python-Pakete, daher können Sie pip nicht verwenden.
Cel

1
Pandoc ist in Haskell geschrieben.
Thomas K

Antworten:


33

Damit es funktioniert, habe ich Latex, typisches Latex-Extra und Pandoc installiert.

Mit Ubuntu:

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

Das Herunterladen dauert einige Male: mehrere 100 MB. Ich habe irgendwo gelesen, dass man --no-install-recommendsfür texlive und extra verwenden kann, um auf dl zu reduzieren.


8
Meins erforderlich pandocund texlive-xetex.
Douggard

Ich habe eine kleinere Liste von Paketen auf ask_ubuntu gefunden .
Eric Duminil

1
Ich brauchte auch texlive-generic-extrazur Lösung dieses Problems , abgesehen von texlive-xetexdem von @douggard vorgeschlagenen.
pgmank

Vielen Dank, das war eine große Hilfe :)
farnaz jazayeri

30

Wenn Sie auf einem Mac arbeiten und Homebrew installiert haben, öffnen Sie eine Terminal-Shell und installieren Sie pandoc, indem Sie den folgenden Befehl eingeben:

Brew install pandoc

Seien Sie geduldig, die Installation und Kompilierung kann bei langsamen Internetverbindungen oder älteren Systemen eine Weile dauern.


3
Dies funktionierte unter OS X 10.10. Ich kann jetzt in LaTeX und PDF konvertieren. (Meine Installation auf pandoc dauerte weniger als eine Minute ... Ich muss die meisten Komponenten bereits auf meinem System gehabt haben.) DANKE!
Drpetermolnar

1
@drpetermolnar Das hat auch bei mir funktioniert (OSX 10.11.6). Dauerte 2 Minuten.
Timothyjgraham

1
@ Akshay, Befehl ist: ipython nbconvert --to PDF <Ihr Notizbuch> .ipynb
Andrea

@AndreaNalon Der oben erwähnte Befehl funktioniert nicht, stackoverflow.com/questions/43247818/…
Akshay Khale

Für OSX 10.13.06 musste ich tun: brew install pandocund brew cask install mactex-no-gui.
bue

12

2015-4-22: Es sieht so aus, als ob ein IPython-Update bedeutet, dass --to pdfanstelle von verwendet werden sollte --to latex --post PDF. Es gibt ein verwandtes Github-Problem .


10

Um Notebooks in PDF zu konvertieren, muss zuerst nbconvert installiert sein.

pip install nbconvert
# OR
conda install nbconvert

Wenn Sie Anaconda nicht verwenden oder noch nicht verwendet haben, müssen Sie pandoc installieren, indem Sie den Anweisungen auf der Website oder unter Linux wie folgt folgen:

sudo apt-get install pandoc

Danach muss XeTex auf Ihrem Computer installiert sein:

Sie können jetzt zu dem Ordner navigieren, in dem sich Ihr IPython-Notizbuch befindet, und den folgenden Befehl ausführen:

jupyter nbconvert --to pdf MyNotebook.ipynb

Weitere Informationen finden Sie unter diesem Link .


4

Wie in den Kommentaren zur Frage angegeben, benötigen Sie Pandoc und Latex (z. B. TeXShop). Ich habe Pandoc mit Homebrew installiert, es dauerte nur eine Sekunde. Mit Pandoc und TeXShop konnte ich Latex generieren, aber kein PDF (in der Befehlszeile).

ipython nbconvert --to latex mynotebook.ipynb

Beim Durchsuchen der Latexdatei (.tex) mit TeXShop war der Fehler auf fehlende Stylesheets und Defs zurückzuführen. Nach der Installation all dieser Elemente (adjustbox.sty, adjcalc.sty, trimclip.sty, collectbox.sty, tc-pgf.def, ucs.sty, uni-global.def, utf8x.def, ucsencs.def) war es endlich soweit Arbeit.

Das Ergebnis sieht jedoch für meinen Geschmack etwas zu funky aus. Es ist schade, dass das Drucken des HTML-Codes von Safari die Syntaxfarbe verliert. Ansonsten sieht es nicht so schlecht aus. (Dies ist alles unter OS X).


1
Die folgende kurze Zeile hat direkt eine PDF-Datei generiert, ohne dass durch Kompilierung erstellte Zwischendateien übrig bleiben. jupyter nbconvert --to pdf filename.ipynb
Llinfeng

Zumindest haben sie jetzt eine Lösung für das Drucken mit Farbe, so dass das Drucken des HTML direkt in PDF weniger schlecht ist: github.com/jupyter/notebook/issues/840
flutefreak7

3

Dieses Python-Skript verfügt über eine grafische Benutzeroberfläche, mit der Sie mit dem Explorer ein Ipython-Notizbuch auswählen können, das Sie in PDF konvertieren möchten. Der Ansatz mit wkhtmltopdf ist der einzige Ansatz, bei dem ich festgestellt habe, dass er gut funktioniert und qualitativ hochwertige PDFs bietet. Andere hier beschriebene Ansätze sind problematisch, die Syntaxhervorhebung funktioniert nicht oder Diagramme sind durcheinander.

Sie müssen wkhtmltopdf installieren: http://wkhtmltopdf.org/downloads.html

und Nbconvert

pip install nbconvert
# OR
conda install nbconvert

Python-Skript

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

Das Skript ist ziemlich lang für eine Stackoverflow-Antwort und schließt nur wkhtml ein. Ich denke, die Antwort wird klarer, wenn Sie nur die Befehlszeilenoptionen für wkhtml und ein Beispiel einfügen.
Hugh Perkins

Im Grunde genommen nbconvertexportieren Sie in HTML und wkhtmltopdfkonvertieren dann in PDF. aber das ist nicht klar aus deiner Antwort :-)
Hugh Perkins

Also habe ich es versucht. Es ist effektiv besser als direkt nach PDF zu exportieren. Seltsamerweise wird ein Teil meines Mathjax korrekt gerendert (am Anfang des Dokuments), und dann wird das Rendern von ungefähr 12 Seiten im Dokument ohne ersichtlichen Grund gestoppt.
Hugh Perkins

3

Ich verwende Anaconda-Jupyter Notebook unter OS: Ubuntu 16.0 für die Python-Programmierung.

Installieren Sie Nbconvert, Pandoc und Tex:

Öffnen Sie ein Terminal und implementieren Sie die folgenden Befehle.

Installieren Sie Nbconvert: Obwohl es Teil des Jupyter-Ökosystems ist, installieren Sie es erneut

$conda install nbconvert

Oder

$pip install nbconvert

Aber ich werde empfehlen, Conda anstelle von Pip zu verwenden, wenn Sie Anaconda verwenden

Pandoc installieren: Da Nbconvert Pandoc verwendet, um Markdown in andere Formate als HTML zu konvertieren. Geben Sie den folgenden Befehl ein

$sudo apt-get install pandoc

TeX installieren: Für die Konvertierung in PDF verwendet nbconvert TeX. Geben Sie den folgenden Befehl ein

$sudo apt-get install texlive-xetex

Schließen Sie nach Ausführung dieser Befehle die geöffneten Notizbücher, aktualisieren Sie die Startseite oder starten Sie den Kernel des geöffneten Notizbuchs neu. Versuchen Sie nun, das Notizbuch als PDF herunterzuladen :)

Hinweis: Weitere Informationen finden Sie in der offiziellen Dokumentation:
https://nbconvert.readthedocs.io/en/latest/install.html


2

Befolgen Sie zum Konvertieren eines Jupyter-Notebooks in PDF die folgenden Anweisungen:

( Seien Sie im Jupyter-Notizbuch ):

Unter Mac OS :

Befehl + P -> Sie erhalten ein Druckdialogfeld -> Ziel als PDF ändern -> Klicken Sie auf Drucken

Unter Windows :

Strg + P -> Sie erhalten ein Druckdialogfeld -> Ziel als PDF ändern -> Klicken Sie auf Drucken

Wenn die obigen Schritte keine vollständige PDF-Datei des Jupyter-Notizbuchs generieren (wahrscheinlich, weil Chrome manchmal nicht alle Ausgaben druckt, weil Jupyter einen Bildlauf für große Ausgaben erstellt),

Führen Sie die folgenden Schritte aus, um den automatischen Bildlauf im Menü zu entfernen : -

Credits: @ ÂngeloPolotto

  1. Klicken Sie in Ihrem Jupyter-Notizbuch oben auf dem Jupyter-Notizbuch auf ZelleGeben Sie hier die Bildbeschreibung ein

  2. Klicken Sie anschließend auf Alle Ausgaben -> Bildlauf umschalten, um den automatischen Bildlauf zu entfernen.

Geben Sie hier die Bildbeschreibung ein


Ich stimme zu, aber Chrome druckt manchmal nicht alle Ausgaben, da Jupyter einen Bildlauf für große Ausgaben erstellt. Sie müssen den automatischen Bildlauf im Menü Zelle-> Alle Ausgaben-> Bildlauf umschalten entfernen (Referenz: stackoverflow.com/a/52803744/6846888 )
Angelo Polotto

Können Sie diese Informationen in Ihre Antwort aufnehmen? Dies kann für mehr Benutzer sehr hilfreich sein.
Angelo Polotto

1
Ja @ ÂngeloPolotto, ich habe Ihre Informationen in meine Antwort aufgenommen.
Akshay Ramesh

1

Dieses Problem trat sowohl bei Ubuntu als auch bei Mac OSX auf. Nach einer hektischen Reihe von Suchen und Versuchen wurden beide gelöst. Dies erfordert sowohl texund pandoc; Beide externen Jumbo-Programme können nicht von Python installiert werden pip.

Mac OSX: Verwenden der MacPorts-Installation von pandoc

port install pandoc

Dies sollte fast eine Stunde in Anspruch nehmen (im abzuschließen üblichen Fall). Wenn das Problem weiterhin besteht, müssen Sie möglicherweise die MacTeX-Distribution installieren. von TeXLive.

Für Ubuntu: Installieren Sie Vanilla TeXLive vom Netzwerkinstallationsprogramm - nicht über apt-get . Installieren Sie dann pandoc mit apt-get.

sudo apt-get install pandoc

Eine vollständige Installation von TeXLive würde bis zu 4,4 GB auf der Festplatte erfordern.

Um all diese Probleme zu vermeiden, wird empfohlen, IPython / Jupyter Notebook zu verwenden, indem Sie die Anaconda Python-Distribution installieren.


1

Ich hatte alle möglichen Probleme, das herauszufinden. Ich weiß nicht, ob es genau das bietet, was Sie benötigen, aber ich habe mein Notizbuch als HTML-Datei heruntergeladen, es dann in meinem Chrome-Browser aufgerufen und dann als PDF-Datei gedruckt, die ich gespeichert habe. Es hat meinen gesamten Code, Text und meine Grafiken erfasst. Es war gut genug für das, was ich brauchte.


1
In meinem Fall hat der HTML-Code eine Zelle pro Seite eingefügt, auch wenn diese zu lang ist. Also keine Lösung
Juh_

1

Wenn Sie die Sagemath- Cloud-Version verwenden, können Sie einfach in die linke Ecke gehen und
Datei -> Herunterladen als -> PDF über LaTeX (.pdf) auswählen.
Überprüfen Sie den Screenshot, wenn Sie möchten.

Screenshot Konvertieren Sie ipynb in pdf

Wenn es aus irgendeinem Grund nicht funktioniert, können Sie einen anderen Weg versuchen.
Wählen Sie Datei -> Druckvorschau und
klicken Sie dann in der Vorschau mit der rechten Maustaste -> Drucken und wählen Sie dann als PDF speichern.


Und wenn das nicht funktioniert, können Sie nbconvert direkt in der Befehlszeile verwenden und genau sehen, was Latexprobleme verursacht.
William Stein

1

Als brandneues Mitglied konnte ich nicht einfach einen Kommentar zu dem Beitrag hinzufügen, aber ich möchte darauf hinweisen, dass die von Phillip Schwartz angebotene Lösung für mich funktioniert hat. Hoffentlich versuchen Menschen in einer ähnlichen Situation diesen Weg früher mit dem Schwerpunkt. Es war eine ganze Weile lang frustrierend, keine Seitenumbrüche zu haben, deshalb bin ich für die obige Diskussion dankbar.

Wie Phillip Schwartz sagte: "Sie müssen wkhtmltopdf installieren: [ http://wkhtmltopdf.org/downloads.html weibl. [1 ]

und Nbconvert "

Anschließend fügen Sie eine Zelle vom Typ "rawNBConvert" hinzu und fügen Folgendes hinzu:

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

Das schien der Trick für mich zu sein, und das generierte PDF hatte den Seitenumbruch an den entsprechenden Stellen. Sie müssen den benutzerdefinierten Code jedoch nicht ausführen, da der "normale" Pfad zum Herunterladen des Notebooks als HTML, Öffnen im Browser und Drucken in PDF nach Installation dieser Dienstprogramme funktioniert.


1

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

Verwenden Sie es Sie können es auch mit nbconvert verwenden:

jupyter-nbconvert --to PDFviaHTML filename.ipynb

Dadurch wird eine Datei mit dem Namen filename.pdf erstellt.

oder pip install notebook-as-pdf

Erstellen Sie ein PDF aus dem Notizbuch jupyter-nbconvert-toPDFviaHTML


0

Was ich fand, war, dass die Datei nbconvert / utils / pandoc.py einen Codefehler hatte, der zu dem Fehler für meinen Computer führte. Der Code prüft, ob sich pandoc in Ihrem Umgebungsvariablenpfad befindet. Für meine Maschine lautet die Antwort nein. Allerdings ist pandoc.exe!

Die Lösung bestand darin, dem Code in Zeile 69 '.exe' hinzuzufügen

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

Gleiches gilt für 'xelatex' ist nicht installiert. Fügen Sie der Datei nbconvert / exporters / pdf.py in Zeile 94 hinzu

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

0

Um .ipynb in pdf zu konvertieren, sollte Ihr System 2 Komponenten enthalten:

  1. nbconvert : Ist ein Teil von Jupyter erlaubt es, ipynb in pdf zu konvertieren

    pip install nbconvert
    OR 
    conda install nbconvert
    
  2. XeTeX: Konvertieren Sie ipynb in das .tex-Format und konvertieren Sie es dann in pdf.

    sudo apt-get install texlive-xetex
    

Dann können Sie den folgenden Befehl verwenden, um in PDF zu konvertieren.

ipython nbconvert --to pdf YOURNOTEBOOK.ipynb

Falls es nicht funktioniert, installieren Sie pandoc und versuchen Sie es erneut.

sudo apt-get install pandoc

0

Für Ubuntu-Benutzer finden Sie hier eine Antwort . Ich zitiere es auch:

Die wahrscheinlichste Ursache ist, dass Sie die entsprechenden Abhängigkeiten nicht installiert haben. Auf Ihrem Ubuntu-System müssen einige Pakete für die Konvertierung von LaTeX- und XeTeX-Dateien installiert sein, damit Sie Ihr Notebook als PDF speichern können. Sie können sie installieren durch:

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

Es gibt auch nbconverteine andere Abhängigkeit, die normalerweise automatisch mit jupyter installiert wird. Sie können es jedoch nur installieren, um sicherzugehen, während Ihre virtuelle Umgebung aktiviert ist:

pip install -U nbconvert

0

Ich hatte Probleme, einige Symbole beim regulären Download als PDF korrekt anzuzeigen . Also als Tex heruntergeladen jupyter nbconvert --to latex "my notebook.ipynb", einige Änderungen mit dem Editor vorgenommen (als Beispiel, in meinem Fall brauchte ich diese Zeilen für meine Sprache

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

) und dann mit pdf exportiert latex --output-format=pdf "my notebook.tex".

Um jedoch die gleichen Zeichen beizubehalten, die Sie in einem Browser sehen, habe ich schließlich meinen Chrome-Browserdruck verwendet : Ctrl+P Print to pdf. Es fügt unnötige Kopf- und Fußzeilen hinzu, aber alles andere bleibt wie es ist. Keine Fehler mehr bei der Verarbeitung des tqdm-Fortschrittsbalkens, kein Code mehr, der von der Seite ausgeht und so weiter. So einfach ist das.


0

In jedem System sind die grundlegenden Schritte zum korrekten Einrichten von nbconvert zum Konvertieren von ipython-Notebooks in PDF / Latex

  1. Installieren Sie nbconvert
  2. Installieren Sie pandoc
  3. Installieren Sie Texlive

Nbconvert installieren

pip install nbconvert

oder conda install nbconvert

Pandoc installieren

sudo apt-get install pandoc für Ubuntu

oder sudo yum install pandocfür CentOS

für andere besuchen Sie die Pandoc-Installation

Texlive installieren

Sie können empfohlene Pakete oder eine vollständige Installation installieren. Für Ubuntu

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

`

Für andere und zur vollständigen Installation von texlive befolgen Sie die Anweisungen bei tug gemäß Ihrem System und Ihrer Wahl.

Ich habe die Datei tar.gz von tug-texlive-download heruntergeladen und die Anweisungen von TeX Live - Quick install befolgt . Installationsanleitung zusammenfassend:

  1. Aufräumen

    rm -rf /usr/local/texlive/2019

    rm -rf ~/.texlive2019

  2. Führen Sie das Installationsprogramm aus

    Entpacken Sie die Zip-Datei

    cd /your/unpacked/directory

    perl install-tl

    Befehl eingeben: i

  3. Pfad einstellen

    sudo vi /etc/bash.bashrc und einfügen

    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. Festlegen der Standard-Papiergröße

    tlmgr paper letter

Die Befehle können je nach System unterschiedlich sein, die grundlegenden Schritte bleiben jedoch gleich.


0

Ich hatte diesen Fehler in Windows 10. Ich habe diese drei Schritte ausgeführt und mein Problem gelöst:

  1. Installieren Sie nbconvert

    pip install nbconvert

  2. Installieren Sie pandoc

https://pandoc.org/installing.html

  1. Installieren Sie miktex

https://miktex.org/download


Es ist auch gut, Bibliotheken zu aktualisieren:

pip install jupyter --upgrade
pip install --upgrade --user nbconvert
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.