Como converter notebooks IPython em PDF e HTML?


92

Quero converter meus notebooks ipython para imprimi-los ou simplesmente enviá-los em formato html. Percebi que já existe uma ferramenta para fazer isso, nbconvert . Embora eu o tenha baixado, não tenho ideia de como converter o notebook, com nbconvert2.py, pois nbconvert diz que ele está obsoleto. nbconvert2.py diz que preciso de um perfil para converter o notebook, o que é? Existe documentação sobre esta ferramenta?


Respostas:


100

Se você tiver o LaTeX instalado, poderá fazer o download como PDF diretamente do bloco de notas Jupyter com Arquivo -> Fazer download como -> PDF via LaTeX (.pdf) . Caso contrário, siga estas duas etapas.

  1. Para a saída HTML, agora você deve usar Jupyter no lugar de IPython e selecionar Arquivo -> Baixar como -> HTML (.html) ou executar o seguinte comando:

    jupyter nbconvert --to html notebook.ipynb  
    

    Isso converterá o arquivo de documento Jupyter notebook.ipynb no formato de saída html.

    O Google Colaboratory é o ambiente de notebook Jupyter gratuito do Google que não requer configuração e é executado inteiramente na nuvem. Se você estiver usando o Google Colab, os comandos são os mesmos, mas o Google Colab só permite o download dos formatos .ipynb ou .py.

  2. Converta o arquivo html notebook.html em um arquivo pdf chamado notebook.pdf. No Windows, Mac ou Linux, instale wkhtmltopdf . wkhtmltopdf é um utilitário de linha de comando para converter html em pdf usando o WebKit. Você pode fazer o download do wkhtmltopdf na página da Web vinculada ou em muitas distros Linux ele pode ser encontrado em seus repositórios.

    wkhtmltopdf notebook.html notebook.pdf   
    

Revisão original (agora quase obsoleta): Converta o arquivo do notebook IPython para html.

ipython nbconvert --to html notebook.ipynb


1
Tudo foi recolhido em uma página -__-
htafoya

2
Para a saída HTML, você deve agora usar jupyterno lugar de, ipythonpor exemplojupyter nbconvert --to html notebook.ipynb
AlexG

Para que isso funcione, jupyter_contrib_nbextensions deve ser instalado.
CharlesG

De acordo com a resposta acima, você precisa do wkhtmltopdf. Para instalá-lo no ubuntu 14.04, funcionou para mim gist.github.com/brunogaspar/ Budap9079245923c04be6b0f92af431c10
Pradeep Singh

4
Você também pode imprimir o site em PDF.
AndiCover

18

Dos documentos :

Se você deseja fornecer a outras pessoas uma visualização estática em HTML ou PDF do seu bloco de notas, use o botão Imprimir. Isso abre uma visão estática do documento, que você pode imprimir em PDF usando os recursos do seu sistema operacional, ou salvar em um arquivo com a opção 'Salvar' do seu navegador (observe que normalmente, isso criará um arquivo html e um diretório chamado notebook_name_files ao lado dele que contém todas as informações de estilo necessárias, então se você pretende compartilhar isso, você deve enviar o diretório junto com o arquivo html principal).


1
Obrigado! A versão HTML é muito boa e muito simples de obter. No entanto, o PDF não é bom, os gráficos são cortados em duas partes se estiverem entre duas páginas e a linha de código longa também é cortada.
nunzio13n

@ nunzio13n - Bem, pelo menos você tem o html ... Eu não usei, nbconvrtentão não posso te ajudar nisso. Espero que apareça alguém que tenha vindo ...
root em

4
Link morto. Além disso, não tenho botão de impressão no meu caderno.
Pat

Usando imprimir em seu navegador usando CTRL+ Pfunciona.
Levi Baguley

a) Exportar como HTML do Jupyter não parece salvar as imagens, b) Arquivo -> Salvar como formulário O Firefox oferece uma página completamente não interativa que mostra apenas o que está visível. Além disso, o link em sua postagem está morto.
jrh

13

nbconvert ainda não foi totalmente substituído por nbconvert2, você ainda pode usá-lo se desejar, caso contrário, teríamos removido o executável. É apenas um aviso de que não corrigimos mais o bug do nbconvert1.

O seguinte deve funcionar:

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

Se você estiver em uma versão de IPython recente o suficiente, não use a visualização de impressão, apenas use a caixa de diálogo de impressão normal. O corte do gráfico em cromo é um problema conhecido (o Chrome não respeita alguns css de impressão), e funciona muito melhor com o firefox, nem todas as versões ainda.

Quanto ao nbconvert2, ainda é altamente dev e docs precisam ser escritos.

Nbviewer usa nbconvert2, por isso é bastante decente com HTML.

Lista dos perfis disponíveis atualmente:

$ 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

Fornece os perfis existentes. (Você pode criar o seu próprio, cf futuro doc, ./nbconvert2.py --help-alldeve fornecer alguma opção que você pode usar em seu perfil.)

então

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

E deve escrever seus arquivos (tex), desde que as figuras extraídas em cwd. Sim, eu sei que isso não é óbvio e provavelmente vai mudar, portanto, não doc ...

A razão para isso é que nbconvert2 será principalmente uma biblioteca python onde, em pseudocódigo, você pode fazer:

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

O ponto de entrada virá mais tarde, quando a API estiver estabilizada.

Vou apenas apontar que @jdfreder (perfil github) está trabalhando na exportação tex / pdf / sphinx e é o especialista em gerar PDF a partir do arquivo ipynb no momento em que este livro foi escrito.


Obrigado, você esclareceu mais minhas dúvidas. Mas ainda assim o nbconvert2.py não funciona, porque ele precisa até mesmo de um arquivo de configuração [NbconvertApp] Config file for profile './profile/latex_base.nbcv' not found, giving upE o nbconvert não me dá diretamente um arquivo pdf, mas um arquivo latex, e eu tenho que processar o arquivo * .tex com o pdflatex, mas é uma boa solução.
nunzio13n

Você pode abrir um problema no github, e nós resolveremos isso.
Matt

Provavelmente não é um problema do nbconvert mas, é devido à minha falta de conhecimento sobre. Talvez quando a documentação for lançada tudo ficará claro, ipython com notebook e nbconvert são um trabalho muito bom e tenho certeza que será uma documentação em breve.
nunzio13n

Isso parece perder / não fornecer nenhuma numeração ipython (esperava que fosse converter usando a diretiva ipython).
Andy Hayden

Existe uma versão da API para fazer isso acontecer? Vejo que existe IPython.nbconvert.exporters.latexe me pergunto se existe uma maneira de obter a saída em PDF sem a ferramenta de linha de comando. Além disso, quais são as dependências para fazê-lo funcionar? (pandoc, tetex, outras coisas?) E presumo que não seja multiplataforma (não funcionará no Windows). TIA!
IanSR

12

Também passe a --executebandeira para obter a saída

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

A prática recomendada é manter a saída do notebook para controle de versão, consulte: Usando notebooks IPython sob controle de versão

Mas então, se você não passar --execute, a saída não estará presente no HTML, veja também: Como executar um Notebook .ipynb Jupyter a partir do terminal?

Para um fragmento HTML sem cabeçalho: Como exportar um bloco de notas IPython para HTML para uma postagem de blog?

Testado em Jupyter 4.4.0.



9

Para aqueles que não podem instalar wkhtmltopdf em seus sistemas, mais um método além de muitos já mencionados nas respostas a esta pergunta é simplesmente baixar o arquivo como um arquivo html do bloco de notas jupyter, fazer o upload para HTML para PDF e fazer o download os arquivos PDF convertidos a partir daí.

Aqui você tem seu notebook IPython (.ipynb) convertido para os formatos PDF (.pdf) e HTML (.html).


4

Somente esta resposta seria útil para você se você tiver fórmulas matemáticas e científicas em seu documento. Mesmo que você não os tenha, ele funciona bem.

Maneira GUI

  • abra o caderno jupyter abra o caderno jupyter
  • Vá para Arquivos> Baixar como> HTML ou PDF via LaTeX Vá para Arquivos> Baixar como> HTML ou PDF via LaTeX

  • Em seguida, verifique o arquivo na pasta Downloads. PS: Se o LaTeX tiver algum erro ao compilar o PDF, ele falhará. Se isso acontecer, baixe o arquivo HTML e use http://webpagetopdf.com/ ou qualquer outro serviço semelhante para converter o HTML em PDF.

Maneira de linha de comando

  • Abra o terminal
  • Navegue até a pasta que contém o bloco de notas jupyter
  • digite "jupyter nbconvert --to pdf your_jupyter_notebook.ipynb" PS: Se falhar, tente a resposta de Yogesh

4

Se você estiver usando a versão sagemath cloud, você pode simplesmente ir para o canto esquerdo,
selecionar Arquivo → Baixar como → Pdf via LaTeX (.pdf)
Verifique a imagem se desejar.
Captura de tela Converter ipynb em pdf

Se não funcionar por algum motivo, você pode tentar outra maneira.
selecione Arquivo → Visualizar impressão e, em seguida,
clique com o botão direito do mouse na visualização → Imprimir e selecione salvar como pdf.


3

Ainda não consigo fazer o pdf funcionar. Os documentos indicam que devo conseguir fazê-lo funcionar com látex, então talvez meu látex não esteja funcionando. 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.

No entanto, o HTML funciona muito bem com 'slides' e é lindo! $ ipython nbconvert --to slides myfile.ipynb ... [NbConvertApp] Writing 215220 bytes to myfile.slides.html

// Atualização 2014-11-07Fri .: A sintaxe IPython v3 difere, é mais simples; $ ipython nbconvert --to PDF myfile.ipynb Em todos os casos, parece que estava faltando a biblioteca 'pdflatex'. Estou investigando isso.


try: $ ipython nbconvert your_file.ipynb --to latex --post PDF
moldovean

ty @moldovean por me fazer ping para dar outra olhada nisso. Mais pesquisas no Google revelaram o problema. A ordem do argumento não importava, ainda recebi "Não existe esse arquivo ou diretório".
AnneTheAgile

essa é uma questão interessante. Talvez ... talvez reinstalar o ipython ajude ... Eu realmente não sei :(
moldovean

@moldovean, verifica-se que certas bibliotecas são necessárias, mas não são instaladas pelo ipynb. Nesse caso, preciso de pelo menos pdflatex no meu caminho. Veja meu PR para melhorar a verificação de erros, github.com/ipython/ipython/pull/6884
AnneTheAgile

3

Você pode fazer isso primeiro convertendo o bloco de notas em HTML e depois no formato PDF:

Seguindo as etapas que implementei em: SO: Ubuntu, notebook Anaconda-Jupyter, Python 3

1 Salvar Notebook em formato HTML:

  1. Inicie o bloco de notas jupyter que deseja salvar no formato HTML. Primeiro salve o bloco de notas corretamente para que o arquivo HTML tenha uma versão salva mais recente de seu código / bloco de notas.

  2. Execute o seguinte comando no próprio notebook:

    !jupyter nbconvert --to html your_notebook_name.ipynb

Após a execução, irá criar uma versão HTML do seu bloco de notas e salvá-la no diretório de trabalho atual. Você verá que um arquivo html será adicionado ao diretório atual com o your_notebook_name.htmlnome

( your_notebook_name.ipynb-> your_notebook_name.html).

2 Salve o html como PDF:

  1. Agora abra esse your_notebook_name.htmlarquivo (clique nele). Ele será aberto em uma nova aba do seu navegador.
  2. Agora vá para a opção de impressão. A partir daqui, você pode salvar este arquivo em formato PDF.

Observe que, na opção de impressão, também temos a flexibilidade de selecionar uma parte de um caderno para salvar em formato pdf.


3

Outras abordagens sugeridas:

  1. Usando o 'Imprimir e selecione salvar como PDF. do seu arquivo HTML resultará na perda de bordas, destaque de sintaxe, corte de plotagens, etc.

  2. Algumas outras bibliotecas mostraram-se quebradas quando se trata de usar versões obsoletas.

Solução: Uma opção melhor e mais fácil é usar um conversor online que irá converter a versão * .html do seu * .ipynb para * .pdf.

Passos:

  1. Primeiro, na interface do notebook Jupyter, converta * .ipynb para * .html usando:

Arquivo> Baixar como> HTML (.html)

  1. Carregue o arquivo * .html recém-criado aqui e selecione a opção HTML para PDF.

  2. Seu arquivo pdf agora está pronto para download.

  3. Agora você tem arquivos .ipynb, .html e .pdf


2

Tenho procurado uma maneira de salvar notebooks como html, pois sempre que tento fazer o download como html com minha nova instalação do Jupyter, sempre recebo um 500 : Internal Server Error The error was: nbconvert failed: validate() got an unexpected keyword argument 'relax_add_props'erro. Curiosamente, descobri que baixar como html é tão simples quanto:

  1. Clique com o botão esquerdo no caderno
  2. Clique em 'Salvar como ...' no menu suspenso
  3. Salve de acordo

Sem visualização de impressão, sem impressão, sem nbconvert. Usando o Jupyter Version: 1.0.0. Apenas uma sugestão para experimentar (obviamente nem todas as configurações são iguais).


2

Acho que o método mais fácil de converter um notebook que está na web em pdf é primeiro visualizá-lo no serviço da web nbviewer . Você pode então imprimi-lo em um arquivo pdf. Se o notebook estiver em sua unidade local, carregue-o primeiro em um repositório github e use seu url para o nbviewer.


2

Eu combinei algumas respostas acima em python embutido que você pode adicionar a ~ / .bashrc ou ~ / .zshrc para compilar e converter muitos blocos de notas em um único arquivo 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 * 
}

2

A versão python simples da resposta de partizanos .

  • abra o Terminal (Linux, MacOS) ou chegue ao ponto onde você pode executar arquivos python no Windows
  • Digite o seguinte código em um arquivo .py (digamos tejas.py)
import os

[os.system("jupyter nbconvert --to pdf " + f) for f in os.listdir(".") if f.endswith("ipynb")]
  • Navegue até a pasta que contém os cadernos jupyter
  • Certifique-se de que tejas.py esteja na pasta atual. Copie-o para a pasta atual, se necessário.
  • digite "python tejas.py"
  • Tarefa concluída

Usar --template reportcomo uma opção adicional também compila um ToC para o pdf resultante pegando os diferentes títulos de marcação no bloco de notas.
Stefan

2

notebook-as-pdfInstall

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

Use-o

Você também pode usá-lo com nbconvert:

jupyter-nbconvert --para PDFviaHTML filename.ipynb

que criará um arquivo chamado filename.pdf.

ou pip instalar notebook-as-pdf

criar pdf do notebook jupyter-nbconvert-toPDFviaHTML


Obrigado, funcionou bem para mim. Eu tentei isso pela primeira vez em um ambiente Python 3.6.8, mas tive alguns problemas. Em seguida, atualizei para um ambiente Python 3.7.8, baseado no Conda, e funcionou como um encanto.
mastDrinkNimbuPani 02 de

Isso ocorre porque asyncio é uma dependência do pacote, e em algum lugar do código há um asyncio.run que é um método somente 3.7.
mastDrinkNimbuPani


0

A maneira mais simples é 'Ctrl + P'> salvar como 'pdf'. É isso aí.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.