Comment convertir des notebooks IPython en PDF et HTML?

89

Je veux convertir mes cahiers ipython pour les imprimer, ou simplement les envoyer au format html. J'ai remarqué qu'il existe déjà un outil pour le faire, nbconvert . Bien que je l'ai téléchargé, je n'ai aucune idée de comment convertir le notebook, avec nbconvert2.py puisque nbconvert dit qu'il est obsolète. nbconvert2.py dit que j'ai besoin d'un profil pour convertir le notebook, qu'est-ce que c'est? Existe-t-il une documentation sur cet outil?

nunzio13n
la source

Réponses:

96

Si LaTeX est installé, vous pouvez télécharger au format PDF directement à partir du notebook Jupyter avec File -> Download as -> PDF via LaTeX (.pdf) . Sinon, suivez ces deux étapes.

  1. Pour la sortie HTML, vous devez maintenant utiliser Jupyter à la place d'IPython et sélectionner Fichier -> Télécharger en tant que -> HTML (.html) ou exécuter la commande suivante:

    jupyter nbconvert --to html notebook.ipynb  
    

    Cela convertira le fichier de document Jupyter notebook.ipynb au format de sortie html.

    Google Colaboratory est l'environnement de bloc-notes Jupyter gratuit de Google qui ne nécessite aucune configuration et fonctionne entièrement dans le cloud. Si vous utilisez Google Colab, les commandes sont les mêmes, mais Google Colab vous permet uniquement de télécharger les formats .ipynb ou .py.

  2. Convertissez le fichier html notebook.html en un fichier pdf appelé notebook.pdf. Sous Windows, Mac ou Linux, installez wkhtmltopdf . wkhtmltopdf est un utilitaire de ligne de commande pour convertir du HTML en pdf à l'aide de WebKit. Vous pouvez télécharger wkhtmltopdf à partir de la page Web liée, ou dans de nombreuses distributions Linux, il peut être trouvé dans leurs référentiels.

    wkhtmltopdf notebook.html notebook.pdf   
    

Révision d'origine (maintenant presque obsolète): convertissez le fichier de bloc-notes IPython en html.

ipython nbconvert --to html notebook.ipynb

Karel
la source
1
Tout a été réduit en une seule page
-__-
2
Pour la sortie HTML, vous devriez maintenant utiliser jupyterà la place de ipythonpar exemplejupyter nbconvert --to html notebook.ipynb
AlexG
Pour que cela fonctionne, jupyter_contrib_nbextensions doit être installé.
CharlesG
Selon la réponse ci-dessus, vous avez besoin de wkhtmltopdf. Pour l'installer dans ubuntu 14.04, cela a fonctionné pour moi gist.github.com/brunogaspar/bd89079245923c04be6b0f92af431c10
Pradeep Singh
3
Vous pouvez également imprimer le site Web au format PDF.
AndiCover
17

À partir de la documentation :

Si vous souhaitez fournir à d'autres une vue HTML ou PDF statique de votre bloc-notes, utilisez le bouton Imprimer. Cela ouvre une vue statique du document, que vous pouvez imprimer au format PDF à l'aide des installations de votre système d'exploitation, ou enregistrer dans un fichier avec l'option `` Enregistrer '' de votre navigateur Web (notez que généralement, cela créera à la fois un fichier html et un répertoire appelé notebook_name_files à côté de celui-ci qui contient toutes les informations de style nécessaires, donc si vous avez l'intention de partager cela, vous devez envoyer le répertoire avec le fichier html principal).

racine
la source
1
Merci! La version HTML est vraiment bonne et très simple à obtenir. Cependant, le PDF n'est pas bon, les graphiques sont coupés en deux s'ils sont entre deux pages et la longue ligne de code est également coupée.
nunzio13n
@ nunzio13n - Au moins, vous avez le code HTML ... Je ne l'ai pas utilisé nbconvrtdonc je ne peux pas vraiment vous aider là-dessus. J'espère que quelqu'un qui sera venu ...
racine
3
Lien mort. De plus, je n'ai pas de bouton d'impression dans mon carnet.
Pat
Utiliser l'impression dans votre navigateur en utilisant CTRL+ Pfonctionne.
Levi Baguley le
13

nbconvert n'est pas encore entièrement remplacé par nbconvert2, vous pouvez toujours l'utiliser si vous le souhaitez, sinon nous aurions supprimé l'exécutable. C'est juste un avertissement que nous ne corrigeons plus nbconvert1.

Les éléments suivants devraient fonctionner:

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

Si vous utilisez une version IPython assez récente, n'utilisez pas la vue d'impression, utilisez simplement la boîte de dialogue d'impression normale. Le graph beeing coupé en chrome est un problème connu (Chrome ne respecte pas certains css d'impression), et fonctionne beaucoup mieux avec Firefox, pas toutes les versions encore.

Quant à nbconvert2, il reste fortement à écrire et les documents doivent être écrits.

Nbviewer utilise nbconvert2 donc c'est assez décent avec HTML.

Liste des profils actuellement disponibles:

$ 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

Donnez-vous les profils existants. (Vous pouvez créer le vôtre, cf future doc, ./nbconvert2.py --help-alldevrait vous donner une option que vous pouvez utiliser dans votre profil.)

puis

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

Et il devrait écrire vos fichiers (tex) aussi longtemps que les chiffres extraits dans cwd. Oui je sais que ce n'est pas évident, et ça va probablement changer donc pas de doc ...

La raison en est que nbconvert2 sera principalement une bibliothèque python où, en pseudo-code, vous pouvez faire:

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

Le point d'entrée viendra plus tard, une fois l'API stabilisée.

Je vais juste souligner que @jdfreder (profil github) travaille sur l'exportation tex / pdf / sphinx et est l'expert pour générer des PDF à partir d'un fichier ipynb au moment de la rédaction de cet article.

Mat
la source
Merci, vous avez clarifié davantage mes doutes. Mais nbconvert2.py ne fonctionne toujours pas, car il a même besoin d'un fichier de configuration [NbconvertApp] Config file for profile './profile/latex_base.nbcv' not found, giving upEt nbconvert ne me donne pas directement un fichier pdf, mais un fichier latex, et je dois traiter le fichier * .tex avec pdflatex, mais c'est une bonne solution.
nunzio13n
Pouvez-vous ouvrir un problème sur github, et nous réglerons le problème.
Matt
Ce n'est probablement pas un problème de nbconvert, mais c'est dû à mon manque de connaissances sur. Peut-être que lorsque la documentation sortira, tout sera clair, ipython avec le notebook et nbconvert sont un très bon travail et je suis sûr que ce sera bientôt une documentation.
nunzio13n
Cela semble perdre / ne donner aucune numérotation ipython (espérait qu'il serait converti en utilisant la directive ipython).
Andy Hayden
Existe-t-il une version d'API pour y parvenir? Je vois qu'il y en a IPython.nbconvert.exporters.latexet je me demande s'il existe un moyen d'obtenir une sortie PDF à partir de cela sans l'outil de ligne de commande. De plus, quelles sont les dépendances pour le faire fonctionner? (pandoc, tetex, autres choses?) Et je suppose que ce n'est pas multiplateforme (ne fonctionnera pas sous Windows). TIA!
IanSR
11

Passez également le --executedrapeau pour obtenir la sortie

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

La meilleure pratique consiste à conserver la sortie hors du bloc-notes pour le contrôle de version, voir: Utilisation de blocs-notes IPython sous contrôle de version

Mais alors, si vous ne passez pas --execute, la sortie ne sera pas présente dans le HTML, voir aussi: Comment exécuter un .ipynb Jupyter Notebook à partir du terminal?

Pour un fragment HTML sans en-tête: comment exporter un notebook IPython en HTML pour un article de blog?

Testé dans Jupyter 4.4.0.

Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
la source
9

Pour ceux qui ne peuvent pas installer wkhtmltopdf dans leurs systèmes, une autre méthode que celles déjà mentionnées dans les réponses à cette question consiste simplement à télécharger le fichier en tant que fichier html à partir du bloc-notes jupyter, à le télécharger au format HTML en PDF et à télécharger les fichiers pdf convertis à partir de là.

Ici, vous avez votre bloc-notes IPython (.ipynb) converti aux formats PDF (.pdf) et HTML (.html).

Shayan Shafiq
la source
8
  1. Enregistrer au format HTML ;
  2. Ctrl+ P;
  3. Enregistrez au format PDF .
סטנלי גרונן
la source
4

Seule cette réponse vous serait utile si vous avez des formules mathématiques et scientifiques dans votre document. Même si vous ne les avez pas, cela fonctionne bien.

Manière GUI

  • ouvrez le notebook Jupyter ouvrez le notebook Jupyter
  • Allez dans Fichiers> Télécharger au format> HTML ou PDF via LaTeX Allez dans Fichiers> Télécharger au format> HTML ou PDF via LaTeX

  • Recherchez ensuite le fichier dans votre dossier Téléchargements. PS: Si LaTeX a eu des erreurs lors de la compilation du PDF, il échouera. Si cela se produit, téléchargez le fichier HTML, puis utilisez http://webpagetopdf.com/ ou tout autre service similaire pour convertir le HTML en PDF.

Manière de ligne de commande

  • Ouvrez le terminal
  • Accédez au dossier contenant le notebook jupyter
  • tapez "jupyter nbconvert --to pdf your_jupyter_notebook.ipynb" PS: Si cela échoue, essayez la réponse de Yogesh
Tejas Shetty
la source
4

Si vous utilisez la version cloud de sagemath , vous pouvez simplement aller dans le coin gauche,
sélectionnez Fichier → Télécharger en tant que → Pdf via LaTeX (.pdf)
Vérifiez la capture d'écran si vous le souhaitez.
Capture d'écran Convertir ipynb en pdf

Si cela ne fonctionne pas pour une raison quelconque, vous pouvez essayer une autre méthode.
sélectionnez Fichier → Aperçu avant impression puis sur l'aperçu,
cliquez avec le bouton droit de la souris → Imprimer puis sélectionnez Enregistrer au format pdf.

Lefteris Xris
la source
3

Je ne peux pas encore faire fonctionner le pdf. La documentation implique que je devrais être capable de le faire fonctionner avec du latex, alors peut-être que mon latex ne fonctionne pas. 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.

Cependant, HTML fonctionne très bien en utilisant des «diapositives», et c'est magnifique! $ ipython nbconvert --to slides myfile.ipynb ... [NbConvertApp] Writing 215220 bytes to myfile.slides.html

// Mise à jour 07/11/2014Fri .: La syntaxe IPython v3 diffère, elle est plus simple; $ ipython nbconvert --to PDF myfile.ipynb Dans tous les cas, il semble que je manquais la bibliothèque 'pdflatex'. J'enquête là-dessus.

AnneTheAgile
la source
essayez: $ ipython nbconvert your_file.ipynb --to latex --post PDF
moldovean
ty @moldovean pour m'avoir demandé de jeter un autre coup d'œil à cela. Plus de recherche sur Google vient de révéler le problème. L'ordre des arguments n'a pas d'importance, j'ai toujours "Aucun fichier ou répertoire".
AnneTheAgile
c'est une question intéressante. Peut-être ... juste peut-être que la réinstallation d'ipython aidera .. Je ne sais vraiment pas :(
moldave
@moldovean, il s'avère que certaines bibliothèques sont requises mais non installées par ipynb. Dans ce cas, j'ai besoin d'au moins pdflatex sur mon chemin. Voir mon PR pour améliorer la vérification des erreurs, github.com/ipython/ipython/pull/6884
AnneTheAgile
3

Vous pouvez le faire en convertissant d'abord le bloc-notes au format HTML puis au format PDF:

Étapes suivantes que j'ai implémentées sur: OS: Ubuntu, notebook Anaconda-Jupyter, Python 3

1 Enregistrez le notebook au format HTML:

  1. Démarrez le notebook jupyter que vous souhaitez enregistrer au format HTML. Enregistrez d'abord correctement le bloc-notes afin que le fichier HTML ait une dernière version enregistrée de votre code / bloc-notes.

  2. Exécutez la commande suivante à partir du notebook lui-même:

    !jupyter nbconvert --to html your_notebook_name.ipynb

Après l'exécution créera la version HTML de votre notebook et l'enregistrera dans le répertoire de travail actuel. Vous verrez qu'un fichier html sera ajouté dans le répertoire actuel avec le your_notebook_name.htmlnom

( your_notebook_name.ipynb-> your_notebook_name.html).

2 Enregistrez le HTML au format PDF:

  1. Ouvrez maintenant ce your_notebook_name.htmlfichier (cliquez dessus). Il sera ouvert dans un nouvel onglet de votre navigateur.
  2. Maintenant, allez à l'option d'impression. De là, vous pouvez enregistrer ce fichier au format pdf.

Notez qu'à partir de l'option d'impression, nous avons également la possibilité de sélectionner une partie d'un cahier à enregistrer au format pdf.

Yogesh
la source
2

J'ai cherché un moyen d'enregistrer des blocs-notes au format html, car chaque fois que j'essaye de télécharger au format html avec ma nouvelle installation Jupyter, j'obtiens toujours une 500 : Internal Server Error The error was: nbconvert failed: validate() got an unexpected keyword argument 'relax_add_props'erreur. Curieusement, j'ai trouvé que le téléchargement au format HTML est aussi simple que:

  1. Clic gauche dans le carnet
  2. Cliquez sur "Enregistrer sous ..." dans le menu déroulant
  3. Économisez en conséquence

Pas d'aperçu avant impression, pas d'impression, pas de nbconvert. Utilisation de Jupyter Version: 1.0.0. Juste une suggestion à essayer (évidemment, toutes les configurations ne sont pas identiques).

semore_1267
la source
2

Je trouve que la méthode la plus simple pour convertir un ordinateur portable qui se trouve sur le Web en pdf consiste d'abord à l'afficher sur le service Web nbviewer . Vous pouvez ensuite l'imprimer dans un fichier pdf. Si le notebook se trouve sur votre lecteur local, téléchargez-le d'abord dans un référentiel github et utilisez son URL pour nbviewer.

hlkw
la source
2

Autres approches suggérées:

  1. En utilisant le 'Imprimer, puis sélectionnez Enregistrer au format PDF.' à partir de votre fichier HTML entraînera la perte des bords de bordure, la mise en évidence de la syntaxe, le rognage des tracés, etc.

  2. Certaines autres bibliothèques se sont avérées défectueuses lorsqu'il s'agit d'utiliser des versions obsolètes.

Solution: Une meilleure option, sans tracas, consiste à utiliser un convertisseur en ligne https://www.sejda.com/html-to-pdf qui convertira la version * .html de votre * .ipynb en * .pdf.

Pas:

  1. Tout d'abord, à partir de l'interface de votre notebook Jupyter, convertissez votre * .ipynb en * .html en utilisant

Fichier> Télécharger en tant que> HTML (.html)

  1. Téléchargez le fichier * .html nouvellement créé sur https://www.sejda.com/html-to-pdf , puis sélectionnez l'option HTML to PDF.

  2. Votre fichier pdf est maintenant prêt à être téléchargé.

  3. Vous avez maintenant des fichiers .ipynb, .html et .pdf

Saurabh Jain
la source
2

J'ai combiné quelques réponses ci-dessus en python en ligne que vous pouvez ajouter à ~ / .bashrc ou ~ / .zshrc pour compiler et convertir de nombreux blocs-notes en un seul fichier 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
la source
2

La version python simple de la réponse de partizanos .

  • ouvrez Terminal (Linux, MacOS) ou accédez au point où vous pouvez exécuter des fichiers python dans Windows
  • Tapez le code suivant dans un fichier .py (disons tejas.py)
import os

[os.system("jupyter nbconvert --to pdf " + f) for f in os.listdir(".") if f.endswith("ipynb")]
  • Accédez au dossier contenant les notebooks jupyter
  • Assurez-vous que tejas.py se trouve dans le dossier actuel. Copiez-le dans le dossier actuel si nécessaire.
  • tapez "python tejas.py"
  • Travail terminé
Tejas Shetty
la source
L'utilisation --template reportcomme option supplémentaire compile également une ToC dans le pdf résultant en prenant les différents en-têtes de démarque dans le cahier.
Stefan le
2

notebook-as-pdfInstaller

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

Utilise le

Vous pouvez également l'utiliser avec nbconvert:

jupyter-nbconvert --en PDF via le nom de fichier HTML.ipynb

qui créera un fichier appelé filename.pdf.

ou pip installer notebook-as-pdf

créer un pdf à partir d'un notebook jupyter-nbconvert-toPDFviaHTML

Dhiren Biren
la source
Merci, cela a bien fonctionné pour moi. J'ai d'abord essayé cela dans un environnement Python 3.6.8 mais j'ai rencontré des problèmes. J'ai ensuite mis à niveau vers un environnement Python 3.7.8, basé sur Conda, et cela a fonctionné comme un charme.
mastDrinkNimbuPani
En effet, asyncio est une dépendance pour le package, et quelque part dans le code, il y a un asyncio.run qui est une méthode uniquement 3.7.
mastDrinkNimbuPani
0

Le moyen le plus simple à mon avis est «Ctrl + P»> enregistrer sous «pdf». C'est ça.

rishikeshF
la source
Cela afficherait les blocs de code
Dani LA