web-dev-qa-db-fra.com

exporter un cahier en pdf sans code

J'ai un grand cahier avec beaucoup de chiffres et de texte. Je veux le convertir en fichier html. Cependant, je ne veux pas exporter le code. J'utilise la commande suivante

ipython nbconvert --to html notebook.ipynb

Mais cette option exporte également le code. Existe-t-il un moyen de convertir le portable en html sans le code?

30
aloha

J'ai trouvé cet article intéressant, il explique comment supprimer les colonnes d'entrée:

il vous suffit de créer un fichier modèle nommé "hidecode.tplx" dans le même répertoire que le bloc-notes que vous souhaitez convertir et d'y ajouter ces lignes:

    ((*- extends 'article.tplx' -*))

((* block input_group *))
    ((*- if cell.metadata.get('nbconvert', {}).get('show_code', False) -*))
        ((( super() )))
    ((*- endif -*))
((* endblock input_group *))

Et après avoir exécuté cette commande, il utilisera pdfLatex pour convertir le cahier en pdf via latex:

jupyter nbconvert --to pdf --template hidecode Example.ipynb

ou si vous voulez éditer vous pouvez le convertir en un document .tex et utiliser pdfLatex pour le mettre en pdf:

jupyter nbconvert --to latex --template hidecode Example.ipynb

EDIT Sept 2018: ipython nbconvert est obsolète. Il sera remplacé par jupyter nbconvert: Nous remplaçons donc la commande ipython par jupyter

23
Espoir Murhabazi

Je cherchais la même question dans SO et finalement avéré d'une manière très simple:

En supposant utiliser Firefox (57) + Win7

  1. Exécutez le cahier Jupyter et téléchargez le cahier dans le navigateur: Fichier-> Télécharger en tant que-> HTML et vous obtiendrez une page html avec le code et la sortie.
  2. Ouvrez le HTML exporté avec le navigateur et activez la console du navigateur avec la touche F12
  3. Exécutez la commande suivante dans la console:

    document.querySelectorAll("div.input").forEach(function(a){a.remove()})
    
  4. Le code supprime toutes les entrées div DOM. Ensuite right mouse button et choisissez "Enregistrer la page sous" et Enregistrer la "Page complète" (pas une seule page).

  5. Vous obtiendrez une page avec un dossier associé dans Windows. Utilisez une astuce en zippant la page html puis extrayez pour dissocier l'associé. Le dossier est inutile.

  6. Maintenant, c'est une seule page html sans code. Vous pouvez le redistribuer ou l'imprimer au format PDF.

Si vous n'utilisez pas Firefox ou Windows, veuillez ajuster les étapes 3-6 ci-dessus.

11
Boying

Vous pouvez ajouter ce css à votre page, puis l'imprimer dans PDF à partir du navigateur. Notez que le code est uniquement masqué, pas supprimé.

div.output_Prompt { visibility: hidden; }
*{ font-family: "Palatino Linotype", "Book Antiqua", Palatino, serif !important }
.input,#header { display: none; }

Pour vous assurer que vous supprimez le code, vous devez utiliser quelque chose comme

$(".input").remove()

Pour autant que je sache, il n'y a aucun moyen de générer via latex un PDF qui n'inclut pas le code. Ce serait formidable d'avoir une extension de portable jupyter qui le fait cependant ...

5
teddy browns

Voici comment je le fais: je télécharge simplement mon carnet en html.

Ensuite, exécutez ce script python pour convertir ce fichier html afin que les invites et les cellules de code aient disparu:

FILE = "/somewhere/myHTMLFile.html"

with open(FILE, 'r') as html_file:
    content = html_file.read()

# Get rid off prompts and source code
content = content.replace("div.input_area {","div.input_area {\n\tdisplay: none;")    
content = content.replace(".Prompt {",".Prompt {\n\tdisplay: none;")

f = open(FILE, 'w')
f.write(content)
f.close()

Ce script ajoute fondamentalement l'attribut CSS 'display: none' pour toutes les divs de la classe 'Prompt' ou 'input_area'.

3
amagard

nbconvert utilise des modèles pour convertir le JSON du bloc-notes en document; par exemple, dans le modèle de démarque fourni avec nbconvert, markdown.tpl:

{% block input %}
{% if nb.metadata.language_info %}{{ nb.metadata.language_info.name }}{% endif %}
{{ cell.source}}
{% endblock input %}

qui imprime la source de chaque cellule dans la sortie. Si vous supprimez {{ cell.source}} alors la source de la cellule ne s'imprimera pas. Il existe également des blocs correspondants dans les modèles HTML et Latex.

Mieux encore, créez votre propre modèle qui fait exactement ce que vous voulez :)

3
Neal Fultz

Comme une généralisation de cette réponse , de sorte que le modèle de hidecode puisse être accessible à partir de plusieurs emplacements:

  1. Accédez au répertoire suivant (Modifier user_name à votre nom d'utilisateur):

    cd /home/<user_name>/.jupyter
    
  2. Créer jupyter_nbconvert_config.py sous ce répertoire.

  3. Écrivez ce qui suit dans le .py fichier (Modifier user_name à votre nom d'utilisateur):

    c = get_config()
    c.TemplateExporter.template_path = ['.', "/home/<user_name>/.jupyter" ]
    c.LatexExporter.template_path = ['.', "/home/<user_name>/.jupyter"]
    
  4. Créez un fichier modèle sous ce répertoire, nommé hidecode.tplx ou hidecode.tpl:

        ((*- extends 'article.tplx' -*))
    
    ((* block input_group *))
        ((*- if cell.metadata.get('nbconvert', {}).get('show_code', False) -*))
                ((( super() )))
        ((*- endif -*))
    ((* endblock input_group *))
    
  5. Ensuite, ce qui suit devrait générer un PDF sans .ipynb codes des fichiers (Modifier file_name à votre nom de fichier):

    jupyter nbconvert --to pdf '<file_name>.ipynb' --template=hidecode.tpl
    
3
KutalmisB