python - ipynb - Exportar cuaderno a pdf sin código
jupyter notebook to pdf (6)
Esta pregunta ya tiene una respuesta aquí:
Tengo un cuaderno grande con muchas figuras y texto. Quiero convertirlo en un archivo html. Sin embargo, no quiero exportar el código. Estoy usando el siguiente comando
ipython nbconvert --to html notebook.ipynb
Pero esta opción también exporta el código. ¿Hay alguna manera de convertir el portátil a html sin el código?
Así es como lo hago: simplemente descargo mi cuaderno como html.
Luego ejecute este script de Python para convertir ese archivo html de modo que las solicitudes y las celdas de código hayan desaparecido:
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()
Esa secuencia de comandos agrega básicamente el atributo CSS ''display: none'' para todos los divs de la clase ''prompt'' o ''input_area''.
Buscaba la misma pregunta en SO y finalmente resultó de una manera muy directa:
Suponiendo que usa Firefox (57) + Win7
- Ejecute el cuaderno Jupyter y descargue el cuaderno en el navegador: Archivo-> Descargar as-> HTML y obtendrá una página html con código y salida.
- Abra el HTML exportado con el navegador y active la consola del navegador con la tecla
F12
Ejecuta el siguiente comando en la consola:
document.querySelectorAll("div.input").forEach(function(a){a.remove()})
El código elimina toda la entrada div DOM y luego hace clic en
right mouse butten
botónright mouse butten
y elige "Guardar página como" y Guardar la "Página completa" (no una sola página)Obtendrá una página con una carpeta asociada en Windows. Use un truco comprimiendo la página html y luego extraiga para desvincular lo asociado. (La carpeta no sirve para nada)
Ahora es una sola página html sin código. Puedes redistribuirlo o imprimirlo en PDF.
Si no está utilizando Firefox o Windows, ajuste los pasos 3-6 anteriores.
Como una generalización de esta respuesta , para que se pueda acceder a la plantilla de código desde varias ubicaciones:
Vaya al siguiente directorio (Cambie nombre de usuario a su nombre de usuario):
cd /home/<user_name>/.jupyter
Cree
jupyter_nbconvert_config.py
bajo este directorio.Escriba lo siguiente en el archivo
.py
(Cambie nombre de usuario a su nombre de usuario):c = get_config() c.TemplateExporter.template_path = [''.'', "/home/<user_name>/.jupyter" ] c.LatexExporter.template_path = [''.'', "/home/<user_name>/.jupyter"]
Cree un archivo de plantilla bajo este directorio, llamado
hidecode.tplx
ohidecode.tpl
:((*- extends ''article.tplx'' -*)) ((* block input_group *)) ((*- if cell.metadata.get(''nbconvert'', {}).get(''show_code'', False) -*)) ((( super() ))) ((*- endif -*)) ((* endblock input_group *))
Luego, lo siguiente debe generar un PDF sin los códigos de los archivos
.ipynb
(Cambiefile_name
a su nombre de archivo):jupyter nbconvert --to pdf ''<file_name>.ipynb'' --template=hidecode.tpl
Encontré this artículo interesante que explica cómo eliminar las columnas de entrada:
solo tiene que crear un archivo de plantilla llamado "hidecode.tplx" en el mismo directorio que el cuaderno que desea convertir y agregar esas líneas en él:
((*- extends ''article.tplx'' -*))
((* block input_group *))
((*- if cell.metadata.get(''nbconvert'', {}).get(''show_code'', False) -*))
((( super() )))
((*- endif -*))
((* endblock input_group *))
Y después de ejecutar este comando, utilizará pdfLatex para convertir el cuaderno en pdf a través de látex:
jupyter nbconvert --to pdf --template hidecode Example.ipynb
o si desea editar, puede convertirlo en un documento .tex y usar pdfLatex para ponerlo en pdf:
jupyter nbconvert --to latex --template hidecode Example.ipynb
EDITAR septiembre de 2018: ipython nbconvert
está en desuso. Será reemplazado por jupyter nbconvert
: Entonces reemplazamos el comando ipython
con jupyter
Puede agregar este css a su página y luego imprimirlo en PDF desde el navegador. Tenga en cuenta que el código solo está oculto, no eliminado.
div.output_prompt { visibility: hidden; }
*{ font-family: "Palatino Linotype", "Book Antiqua", Palatino, serif !important }
.input,#header { display: none; }
Para asegurarse de eliminar el código, debe usar algo como
$(".input").remove()
Que yo sepa, no hay manera de generar a través de látex un PDF que no incluya el código. Sería genial tener una extensión de portátil jupyter que lo haga ...
nbconvert
usa plantillas para convertir el JSON del cuaderno en un documento; por ejemplo, en la plantilla de markdown que viene con nbconvert, markdown.tpl
:
{% block input %}
{% if nb.metadata.language_info %}{{ nb.metadata.language_info.name }}{% endif %}
{{ cell.source}}
{% endblock input %}
que imprime la fuente de cada celda en la salida. Si elimina {{ cell.source}}
, la fuente de la celda no se imprimirá. También hay bloques correspondientes en las plantillas HTML y Latex.
Mejor aún, haz tu propia plantilla que haga exactamente lo que quieres :)