Problemas de IPython / Jupyter ao salvar notebook como PDF


86

Então, estou tentando salvar um caderno Jupyter como PDF, mas simplesmente não consigo descobrir como fazer isso. A primeira coisa que tento é no menu de arquivo apenas fazer o download como PDF, mas isso resulta em:

nbconvert failed: PDF creating failed

a próxima coisa que tento é tentar fazer a conversão do prompt de comando assim

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

mas, novamente, isso resulta em uma mensagem de erro

ImportError: No module named 'PDF'

e se eu tentar

$ ipython nbconvert --to latex MyNotebook.ipynb 

isto resulta em

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

se eu tentar instalar o pandoc ( pip install pandoc), isso me dará

ImportError: No module named 'ConfigParser'

e é aqui que fico preso porque simplesmente não sei mais o que fazer. Alguém tem ideia de como consertar o que está errado?


2
a criação de pdfs requer dependências não-pythônicas (ie pandoce latex)
cel

4
Isso significa que você deve instalá-los antes de usar esse recurso. E eles não são pacotes python, portanto, você não pode usar pip.
cel

1
pandoc é escrito em Haskell.
Thomas K

Respostas:


33

Para fazer funcionar, instalei latex, latex extra típico e pandoc.

Com o ubuntu:

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

leva alguns tempos: vários 100 Mb para fazer o download. Eu li em algum lugar que você pode usar --no-install-recommendspara texlive e extra para reduzir ao dl.


8
Meu necessário pandoce texlive-xetex.
douggard

Encontrei uma lista menor de pacotes no ask_ubuntu .
Eric Duminil

1
Eu também precisava texlive-generic-extraresolver esse problema , além do texlive-xetexque @douggard sugeriu.
pgmank

Muito obrigado, foi uma grande ajuda :)
farnaz jazayeri

30

Se você estiver em um Mac e tiver o Homebrew instalado, abra um terminal e instale o pandoc digitando o comando:

brew install pandoc

seja paciente, o tempo de instalação e compilação pode demorar um pouco em conexões lentas de internet ou sistemas mais antigos.


3
Isso funcionou no OS X 10.10. Agora posso converter para LaTeX e PDF. (Minha instalação no Pandoc demorou menos de um minuto ... Devo ter a maioria dos componentes já no meu sistema.) OBRIGADO!
drpetermolnar

1
@drpetermolnar Isso também funcionou para mim (OSX 10.11.6). Demorou 2 minutos.
timothyjgraham

1
@Akshay, o comando é: ipython nbconvert --to PDF <seu caderno> .ipynb
Andrea

@AndreaNalon O comando mencionado acima não está funcionando, stackoverflow.com/questions/43247818/…
Akshay Khale

Para OSX 10.13.06, tive que fazer: brew install pandoce brew cask install mactex-no-gui.
bue

12

22/04/2015: Parece que uma atualização do IPython significa que --to pdfdeve ser usado em vez de --to latex --post PDF. Há um problema relacionado ao Github .


10

Para converter blocos de notas em PDF, primeiro você precisa ter o nbconvert instalado.

pip install nbconvert
# OR
conda install nbconvert

Em seguida, se você não estiver usando o Anaconda ou ainda não o fez, você deve instalar o pandoc seguindo as instruções em seu site ou, no Linux, da seguinte maneira:

sudo apt-get install pandoc

Depois disso, você precisa ter o XeTex instalado em sua máquina:

Agora você pode navegar até a pasta que contém seu IPython Notebook e executar o seguinte comando:

jupyter nbconvert --to pdf MyNotebook.ipynb

para mais referências, confira este link .


4

Como dizem os comentários à pergunta, você precisará do pandoc e do latex (por exemplo, TeXShop). Instalei o pandoc com o Homebrew, demorou apenas um segundo. Tendo pandoc e TeXShop, eu poderia gerar latex, mas não pdf (na linha de comando).

ipython nbconvert --to latex mynotebook.ipynb

Explorando o arquivo latex (.tex) com TeXShop, a falha foi devido à falta de folhas de estilo e defs. Depois de instalar tudo isso (Adjustbox.sty, adjcalc.sty, trimclip.sty, collectbox.sty, tc-pgf.def, ucs.sty, uni-global.def, utf8x.def, ucsencs.def), finalmente trabalhos.

No entanto, o resultado parece um pouco descolado para o meu gosto. É uma pena que imprimir o html do Safari perca a coloração da sintaxe. Caso contrário, não parece tão ruim. (Isso tudo está no OS X).


1
A linha curta a seguir gerou diretamente um arquivo PDF sem deixar nenhum arquivo intermediário criado por meio da compilação. jupyter nbconvert --to pdf filename.ipynb
llinfeng

Pelo menos eles têm uma correção para impressão em cores agora, de modo que imprimir o HTML diretamente em PDF é menos ruim: github.com/jupyter/notebook/issues/840
flutefreak7

3

Este script Python tem GUI para selecionar com o explorer um Ipython Notebook que você deseja converter para pdf. A abordagem com wkhtmltopdf é a única que achei que funciona bem e fornece PDFs de alta qualidade. Outras abordagens descritas aqui são problemáticas, o realce de sintaxe não funciona ou os gráficos estão bagunçados.

Você precisará instalar wkhtmltopdf: http://wkhtmltopdf.org/downloads.html

e Nbconvert

pip install nbconvert
# OR
conda install nbconvert

Script Python

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

script é meio longo para uma resposta stackoverflow, e apenas envolve wkhtml. Acho que a resposta ficará mais clara se você apenas inserir as opções de linha de comando para wkhtml e um exemplo.
Hugh Perkins

então, basicamente, você está usando nbconvertpara exportar para html e, em seguida, usar wkhtmltopdfpara converter para pdf. mas isso não está claro em sua resposta :-)
Hugh Perkins

Então, eu tentei isso. É efetivamente melhor do que exportar diretamente para pdf. Estranhamente, parte do meu mathjax é renderizado corretamente (no início do documento) e, em seguida, para de renderizar cerca de 12 páginas do documento, sem nenhuma razão óbvia.
Hugh Perkins

3

Estou usando o Notebook Anaconda-Jupyter no sistema operacional: Ubuntu 16.0 para programação em Python.

Instale Nbconvert, Pandoc e Tex:

Abra um terminal e implemente os seguintes comandos nele.

Instale o Nbconvert: embora seja parte do ecossistema Jupyter, instale-o novamente

$conda install nbconvert

Ou

$pip install nbconvert

Mas vou recomendar o uso de conda em vez de pip se você estiver usando anaconda

Instale o Pandoc: já que o Nbconvert usa o Pandoc para converter o markdown em formatos diferentes de HTML. Digite o seguinte comando

$sudo apt-get install pandoc

Instale o TeX: Para converter para PDF, nbconvert usa o TeX. Digite o seguinte comando

$sudo apt-get install texlive-xetex

Após a execução desses comandos, feche os blocos de notas abertos, atualize a página inicial ou reinicie o kernel do bloco de notas aberto. Agora tente fazer o download do notebook em PDF :)

Observação: para obter mais detalhes, consulte a documentação oficial:
https://nbconvert.readthedocs.io/en/latest/install.html


2

Para converter qualquer bloco de notas Jupyter em PDF, siga as instruções abaixo:

( Esteja dentro do caderno Jupyter ):

No Mac OS :

command + P -> você obterá uma caixa de diálogo de impressão -> alterar destino como PDF -> Clique em imprimir

No Windows :

Ctrl + P -> você obterá uma caixa de diálogo de impressão -> alterar o destino como PDF -> Clique em imprimir

Se as etapas acima não geram PDF completo do notebook Jupyter (provavelmente porque o Chrome, algumas vezes, não imprime todas as saídas porque o Jupyter faz uma rolagem para grandes saídas),

Tente realizar as etapas abaixo para remover a rolagem automática no menu : -

Créditos: @ ÂngeloPolotto

  1. Em seu Jupyter Notebook, clique em Célula na parte superior do Jupyter Notebook insira a descrição da imagem aqui

  2. Em seguida, clique em Todas as saídas -> Alternar rolagem para remover a rolagem automática.

insira a descrição da imagem aqui


Concordo, mas o Chrome, às vezes, não imprime todas as saídas porque o Jupyter faz um scroll para grandes saídas. Você precisa remover a rolagem automática no menu Célula-> Todas as saídas-> Alternar rolagem (referência: stackoverflow.com/a/52803744/6846888 )
Ângelo Polotto

Você pode adicionar essas informações em sua resposta? Isso pode ser muito útil para mais usuários.
Ângelo Polotto

1
Sim @ ÂngeloPolotto, adicionei seus dados na minha resposta.
Akshay Ramesh

1

Este problema ocorreu com Ubuntu e Mac OSX. Depois de uma série de buscas e testes frenéticos, ambos foram resolvidos. Isso requer ambos texe pandoc; ambos os programas externos jumbo não podem ser instalados pelo Python pip.

Mac OSX: usando a instalação do MacPorts do pandoc

port install pandoc

Isso deve levar quase uma hora para ser concluído (no caso usual ). Se o problema persistir, pode ser necessário instalar a distribuição MacTeX. de TeXLive.

Para Ubuntu: instale vanilla TeXLive a partir do instalador de rede - não por meio do apt-get . Em seguida, instale o pandoc usando apt-get.

sudo apt-get install pandoc

Uma instalação completa do TeXLive exigiria até 4,4 GB em disco.

Para evitar todo esse problema, a maneira recomendada de usar o Notebook IPython / Jupyter seria instalar a distribuição Anaconda Python.


1

Tive todos os tipos de problemas para descobrir isso também. Não sei se ele fornecerá exatamente o que você precisa, mas baixei meu bloco de notas como um arquivo HTML, abri-o no navegador Chrome e imprimi-o como um arquivo PDF, que salvei. Ele capturou todo o meu código, texto e gráficos. Era bom o suficiente para o que eu precisava.


1
No meu caso, o html coloca uma célula por página mesmo que seja muito longa. Portanto, não é uma solução
Juh_

1

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 captura de tela se desejar.

Captura de tela Converter ipynb em pdf

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


E se isso não funcionar, você pode usar o nbconvert diretamente na linha de comando e ver exatamente o que está causando o problema com o látex.
William Stein

1

Como um membro novo, não pude simplesmente adicionar um comentário sobre a postagem, mas quero ressaltar que a solução oferecida por Phillip Schwartz funcionou para mim. Esperançosamente, pessoas em uma situação semelhante tentarão esse caminho mais cedo com ênfase. Não ter quebras de página foi um problema frustrante por um bom tempo, por isso sou grato pela discussão acima.

Como disse Phillip Schwartz: "Você precisará instalar o wkhtmltopdf: [ http://wkhtmltopdf.org/downloads.html][1]

e Nbconvert "

Em seguida, você adiciona uma célula do tipo "rawNBConvert" e inclui:

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

Isso pareceu funcionar para mim, e o PDF gerado teve a quebra de página nos locais correspondentes. Você não precisa executar o código personalizado, pois parece que o caminho "normal" de baixar o notebook como HTML, abrir no navegador e imprimir em PDF funciona depois que esses utilitários são instalados.


1

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


0

O que descobri foi que o nbconvert / utils / pandoc.py tinha um bug de código que resultou no erro em minha máquina. O código verifica se pandoc está no caminho das variáveis ​​ambientais. Para minha máquina, a resposta é não. No entanto, o pandoc.exe é!

A solução foi adicionar '.exe' ao código na linha 69

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

O mesmo vale para 'xelatex' não está instalado. Adicione ao arquivo nbconvert / exporters / pdf.py na linha 94

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

0

Para converter .ipynb em pdf, seu sistema deve conter 2 componentes,

  1. nbconvert : faz parte do jupyter permite converter ipynb para pdf

    pip install nbconvert
    OR 
    conda install nbconvert
    
  2. XeTeX: Converta ipynb para o formato .tex e depois converta para pdf.

    sudo apt-get install texlive-xetex
    

Então você pode usar o comando abaixo para converter para pdf,

ipython nbconvert --to pdf YOURNOTEBOOK.ipynb

Caso não funcione, instale o pandoc e tente novamente.

sudo apt-get install pandoc

0

Para usuários do Ubuntu, uma resposta pode ser encontrada aqui . Eu também cito:

A causa mais provável é que você não instalou as dependências apropriadas. Seu sistema Ubuntu deve ter alguns pacotes instalados relativos à conversão de arquivos LaTeX e XeTeX, a fim de salvar seu notebook como PDF. Você pode instalá-los por:

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

Além disso, nbconverté outra dependência que geralmente é instalada automaticamente com o jupyter. Mas você pode instalá-lo apenas para ter certeza, enquanto mantém seu ambiente virtual ativado:

pip install -U nbconvert

0

Tive problemas ao exibir corretamente alguns símbolos com download regular como PDF . Então baixei como tex jupyter nbconvert --to latex "my notebook.ipynb", fiz alguns ajustes no notepad (por exemplo, no meu caso eu precisava dessas linhas para o meu idioma

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

) e depois exportado para pdf com latex --output-format=pdf "my notebook.tex".

Mas, finalmente, no entanto, para manter os mesmos caracteres que você vê em um navegador Acabei usando a minha impressão do navegador Chrome: Ctrl+P Print to pdf. Ele adiciona cabeçalho e rodapé desnecessários, mas todo o resto permanece como está. Não há mais erros no processamento da barra de progresso tqdm, não há mais código saindo da página e assim por diante. Simples assim.


0

Em qualquer sistema, as etapas básicas para configurar corretamente o nbconvert para converter notebooks ipython em pdf / latex são

  1. Instale o nbconvert
  2. Instalar pandoc
  3. Instale Texlive

Instalando nbconvert

pip install nbconvert

ou conda install nbconvert

Instalando pandoc

sudo apt-get install pandoc para Ubuntu

ou sudo yum install pandocpara CentOS

para outros, visite pandoc-installation

Instalando o texlive

Você pode instalar pacotes recomendados ou instalação completa. Para Ubuntu

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

`

Para outros e para a instalação completa do texlive, siga as instruções fornecidas em tug de acordo com seu sistema e escolha.

Eu baixei o arquivo tar.gz de tug-texlive-download e segui as instruções fornecidas no TeX Live - Instalação rápida . Instruções de instalação resumidas:

  1. Limpar

    rm -rf /usr/local/texlive/2019

    rm -rf ~/.texlive2019

  2. Execute o instalador

    descompacte o arquivo zip

    cd /your/unpacked/directory

    perl install-tl

    Digite o comando: i

  3. Caminho de configuração

    sudo vi /etc/bash.bashrc e inserir

    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. Configurando o tamanho do papel padrão

    tlmgr paper letter

Os comandos podem ser diferentes de acordo com o seu sistema, mas as etapas básicas permanecem as mesmas.


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.