IPython / Jupyter Masalah saat menyimpan notebook sebagai PDF

88

Jadi, saya sudah mencoba untuk menyimpan notebook jupyter sebagai PDF tetapi saya tidak tahu bagaimana melakukan ini. Hal pertama yang saya coba adalah dari menu file hanya unduh sebagai PDF, tetapi melakukan itu menghasilkan:

nbconvert failed: PDF creating failed

hal berikutnya yang saya coba adalah mencoba melakukan konversi dari Command Prompt seperti ini

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

tetapi sekali lagi, ini menghasilkan pesan kesalahan

ImportError: No module named 'PDF'

dan jika saya mencoba

$ ipython nbconvert --to latex MyNotebook.ipynb 

ini menghasilkan

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

jika saya mencoba menginstal pandoc ( pip install pandoc), ini memberi saya

ImportError: No module named 'ConfigParser'

dan di sinilah saya terjebak karena saya tidak tahu harus berbuat apa lagi. Adakah yang tahu bagaimana memperbaiki apa yang salah?

Isak Baizley
sumber
2
membuat pdf membutuhkan dependensi non-pythonic (yaitu pandocdan latex)
cel
4
Itu berarti Anda harus menginstalnya sebelum Anda dapat menggunakan fitur ini. Dan itu bukan paket python, oleh karena itu Anda tidak dapat menggunakan pip.
cel
1
pandoc ditulis dalam Haskell.
Thomas K

Jawaban:

34

Untuk membuatnya bekerja, saya memasang lateks, ekstra lateks khas, dan pandoc.

Dengan ubuntu:

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

dibutuhkan beberapa waktu: beberapa 100 Mb untuk mengunduh. Saya membaca di suatu tempat yang dapat Anda gunakan --no-install-recommendsuntuk texlive dan ekstra untuk mengurangi dl tersebut.

Juh_
sumber
9
Milik saya diperlukan pandocdan texlive-xetex.
douggard
Saya menemukan daftar paket yang lebih kecil di ask_ubuntu .
Eric Duminil
2
Saya juga perlu texlive-generic-extramenyelesaikan masalah ini , selain dari texlive-xetexsaran @douggard itu.
pgmank
Terima kasih banyak, itu sangat membantu :)
farnaz jazayeri
30

Jika Anda menggunakan Mac dan menginstal Homebrew, buka shell terminal dan instal pandoc dengan mengetik perintah:

brew install pandoc

Bersabarlah, waktu untuk menginstal dan mengkompilasi dapat memakan waktu cukup lama pada koneksi internet yang lambat atau sistem yang lebih lama.

Andrea
sumber
3
Ini bekerja pada OS X 10.10. Sekarang saya dapat mengonversi ke LaTeX dan PDF. (Instalasi saya di pandoc membutuhkan waktu kurang dari satu menit ... Saya pasti sudah memiliki sebagian besar komponen di sistem saya.) TERIMA KASIH!
drpetermolnar
1
@drpetermolnar Ini juga berhasil untuk saya (OSX 10.11.6). Butuh waktu 2 menit.
timothyjgraham
1
@ Akshay, perintahnya adalah: ipython nbconvert --to PDF <notebook Anda> .ipynb
Andrea
@AndreaNalon Perintah yang disebutkan di atas tidak berfungsi, stackoverflow.com/questions/43247818/…
Akshay Khale
Untuk OSX 10.13.06 saya harus melakukan: brew install pandocdan brew cask install mactex-no-gui.
sejak
12

2015-4-22: Sepertinya pembaruan IPython berarti yang --to pdfharus digunakan sebagai pengganti --to latex --post PDF. Ada masalah Github terkait .

Scott
sumber
10

Untuk mengonversi buku catatan ke PDF, Anda harus menginstal nbconvert terlebih dahulu.

pip install nbconvert
# OR
conda install nbconvert

Selanjutnya, jika Anda belum menggunakan Anaconda atau belum, Anda harus menginstal pandoc dengan mengikuti petunjuk di situs web mereka atau, di Linux, sebagai berikut:

sudo apt-get install pandoc

Setelah itu Anda perlu menginstal XeTex di komputer Anda:

Anda sekarang dapat menavigasi ke folder yang menyimpan Notebook IPython Anda dan menjalankan perintah berikut:

jupyter nbconvert --to pdf MyNotebook.ipynb

untuk referensi lebih lanjut, silakan lihat tautan ini .

Tanmay Lata
sumber
4

Seperti komentar untuk pertanyaan tersebut, Anda akan membutuhkan pandoc dan lateks (misalnya TeXShop). Saya menginstal pandoc dengan Homebrew, hanya butuh satu detik. Memiliki pandoc dan TeXShop, saya dapat menghasilkan lateks tetapi bukan pdf (pada baris perintah).

ipython nbconvert --to latex mynotebook.ipynb

Menjelajahi file lateks (.tex) dengan TeXShop, kegagalan itu karena tidak adanya stylesheet dan def. Setelah menginstal semua ini (adjustbox.sty, adjcalc.sty, trimclip.sty, collectbox.sty, tc-pgf.def, ucs.sty, uni-global.def, utf8x.def, ucsencs.def), akhirnya berhasil kerja.

Namun, hasilnya terlihat agak terlalu funky untuk selera saya. Sayang sekali bahwa mencetak html dari Safari kehilangan pewarnaan sintaks. Kalau tidak, tidak terlihat terlalu buruk. (Ini semua ada di OS X).

telliott99.dll
sumber
1
Baris pendek berikut secara langsung menghasilkan file PDF tanpa meninggalkan file perantara yang dibuat melalui kompilasi. jupyter nbconvert --to pdf filename.ipynb
llinfeng
Setidaknya mereka memiliki perbaikan untuk pencetakan dengan warna sekarang sehingga mencetak HTML langsung ke PDF tidak terlalu buruk: github.com/jupyter/notebook/issues/840
flutefreak7
3

Skrip Python ini memiliki GUI untuk dipilih dengan penjelajah Notebook Ipython yang ingin Anda ubah ke pdf. Pendekatan dengan wkhtmltopdf adalah satu-satunya pendekatan yang saya temukan berfungsi dengan baik dan menyediakan pdf berkualitas tinggi. Pendekatan lain yang dijelaskan di sini bermasalah, penyorotan sintaksis tidak berfungsi atau grafik kacau.

Anda harus memasang wkhtmltopdf: http://wkhtmltopdf.org/downloads.html

dan Nbconvert

pip install nbconvert
# OR
conda install nbconvert

Skrip 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()
Philipp Schwarz
sumber
script agak panjang untuk balasan stackoverflow benar-benar, dan hanya membungkus wkhtml. Saya htink jawabannya akan lebih jelas jika Anda hanya meletakkan opsi baris perintah untuk wkhtml, dan contoh.
Hugh Perkins
jadi pada dasarnya, Anda menggunakan nbconvertuntuk mengekspor ke html, lalu menggunakan wkhtmltopdfuntuk mengonversi ke pdf. tetapi ini tidak jelas dari jawaban Anda :-)
Hugh Perkins
Jadi, saya mencoba ini. Secara efektif lebih baik daripada mengekspor langsung ke pdf. Anehnya, beberapa mathjax saya dirender dengan benar (di awal dokumen), dan kemudian berhenti rendering, sekitar 12 halaman ke dalam dokumen, tanpa alasan yang jelas.
Hugh Perkins
3

Saya menggunakan Anaconda-Jupyter Notebook di OS: Ubuntu 16.0 untuk pemrograman Python.

Instal Nbconvert, Pandoc, dan Tex:

Buka terminal dan terapkan perintah berikut di dalamnya.

Instal Nbconvert: meskipun itu bagian dari ekosistem Jupyter, tetap instal sekali lagi

$conda install nbconvert

Atau

$pip install nbconvert

Tetapi saya akan merekomendasikan menggunakan conda daripada pip jika Anda menggunakan anaconda

Instal Pandoc: karena Nbconvert menggunakan Pandoc untuk mengonversi penurunan harga ke format selain HTML. Ketik perintah berikut

$sudo apt-get install pandoc

Instal TeX: Untuk mengonversi ke PDF, nbconvert menggunakan TeX. Ketik perintah berikut

$sudo apt-get install texlive-xetex

Setelah menjalankan perintah ini, tutup buku catatan yang dibuka, segarkan halaman beranda Atau mulai ulang kernel dari buku catatan yang dibuka. Sekarang coba unduh notebook sebagai pdf :)

Catatan: Untuk lebih jelasnya, silakan lihat dokumentasi resmi:
https://nbconvert.readthedocs.io/en/latest/install.html

Yogesh
sumber
2

Untuk mengonversi notebook Jupyter apa pun ke PDF, ikuti petunjuk di bawah ini:

( Berada di dalam notebook Jupyter ):

Di Mac OS :

perintah + P -> Anda akan mendapatkan kotak dialog cetak -> ubah tujuan sebagai PDF -> Klik cetak

Di Windows :

Ctrl + P -> Anda akan mendapatkan kotak dialog cetak -> ubah tujuan sebagai PDF -> Klik cetak

Jika langkah-langkah di atas tidak menghasilkan PDF penuh dari notebook Jupyter (mungkin karena Chrome, terkadang, tidak mencetak semua output karena Jupyter membuat scroll untuk output besar),

Coba lakukan langkah-langkah di bawah ini untuk menghapus gulir otomatis di menu : -

Penghargaan: @ ÂngeloPolotto

  1. Di Notebook Jupyter Anda, klik Sel di atas notebook jupyter masukkan deskripsi gambar di sini

  2. Selanjutnya klik All output -> Toggle scrolling untuk menghapus auto scroll.

masukkan deskripsi gambar di sini

MobileDev
sumber
Saya setuju, tetapi Chrome, beberapa kali, tidak mencetak semua output karena Jupyter membuat scroll untuk output besar. Anda perlu menghapus auto scroll di menu Cell-> All Outputs-> Toggle Scrolling (referensi: stackoverflow.com/a/52803744/6846888 )
Ângelo Polotto
Bisakah Anda menambahkan informasi ini dalam jawaban Anda? Ini bisa sangat membantu untuk lebih banyak pengguna.
Ângelo Polotto
1
Ya @ ÂngeloPolotto, saya telah menambahkan informasi Anda dalam jawaban saya.
MobileDev
1

Masalah ini dialami dengan Ubuntu dan Mac OSX. Setelah serangkaian pencarian dan cobaan yang panik, keduanya terpecahkan. Ini membutuhkan keduanya texdan pandoc; kedua program eksternal jumbo tidak dapat diinstal oleh Python pip.

Mac OSX: menggunakan penginstalan pandoc MacPorts

port install pandoc

Ini akan memakan waktu hampir satu jam untuk menyelesaikannya (dalam kasus biasa ). Jika masalah terus berlanjut, Anda mungkin harus menginstal distro MacTeX. dari TeXLive.

Untuk Ubuntu: instal vanilla TeXLive dari penginstal jaringan - bukan melalui apt-get . Kemudian instal pandoc menggunakan apt-get.

sudo apt-get install pandoc

Penginstalan TeXLive secara lengkap membutuhkan hingga 4,4 GB pada disk.

Untuk menyelamatkan semua masalah ini, cara yang disarankan untuk menggunakan Notebook IPython / Jupyter adalah dengan menginstal distribusi Anaconda Python.

Ébe Isaac
sumber
1

Saya memiliki banyak masalah untuk memikirkan hal ini juga. Saya tidak tahu apakah itu akan memberikan apa yang Anda butuhkan, tetapi saya mengunduh buku catatan saya sebagai file HTML, lalu menariknya ke browser Chrome saya, dan kemudian mencetaknya sebagai file PDF, yang saya simpan. Itu menangkap semua kode, teks, dan grafik saya. Itu cukup baik untuk apa yang saya butuhkan.

twin_pilgrim
sumber
1
Dalam kasus saya, html meletakkan satu sel per halaman meskipun itu terlalu panjang. Jadi bukan solusi
Juh_
1

Jika Anda menggunakan versi cloud sagemath , Anda cukup pergi ke sudut kiri,
pilih File -> Download as -> Pdf via LaTeX (.pdf)
Periksa tangkapan layar jika Anda mau.

Screenshot Mengonversi ipynb ke pdf

Jika tidak berhasil karena alasan apa pun, Anda dapat mencoba cara lain.
pilih File -> Print Preview lalu pada preview
klik kanan -> Print kemudian pilih save as pdf.

Lefteris Xris
sumber
Dan jika itu tidak berhasil, Anda dapat langsung menggunakan nbconvert pada baris perintah dan melihat dengan tepat apa yang menyebabkan masalah lateks.
William Stein
1

Sebagai anggota baru, saya tidak dapat hanya menambahkan komentar di kiriman tetapi saya ingin menyatakan bahwa solusi yang ditawarkan oleh Phillip Schwartz berhasil untuk saya. Mudah-mudahan orang-orang dalam situasi serupa akan mencoba jalan itu lebih cepat dengan penekanan. Tidak adanya jeda halaman adalah masalah yang membuat frustrasi untuk beberapa saat jadi saya berterima kasih atas diskusi di atas.

Seperti yang dikatakan Phillip Schwartz: "Anda harus memasang wkhtmltopdf: [ http://wkhtmltopdf.org/downloads.html][1]

dan Nbconvert "

Anda kemudian menambahkan sel dengan jenis "rawNBConvert" dan menyertakan:

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

Itu sepertinya berhasil bagi saya, dan PDF yang dihasilkan memiliki jeda halaman di lokasi yang sesuai. Anda tidak perlu menjalankan kode khusus, karena tampaknya jalur "normal" untuk mengunduh buku catatan sebagai HTML, membuka di browser, dan mencetak ke PDF berfungsi setelah utilitas tersebut dipasang.

Ody
sumber
1

Untuk mengubah .ipynb menjadi pdf, sistem Anda harus berisi 2 komponen,

  1. nbconvert : Merupakan bagian dari jupyter yang memungkinkan untuk mengkonversi ipynb ke pdf

    pip install nbconvert
    OR 
    conda install nbconvert
    
  2. XeTeX: Konversikan ipynb ke format .tex dan kemudian konversikan ke pdf.

    sudo apt-get install texlive-xetex
    

Kemudian Anda dapat menggunakan perintah di bawah ini untuk mengonversi ke pdf,

ipython nbconvert --to pdf YOURNOTEBOOK.ipynb

Jika tidak berhasil, instal pandoc dan coba lagi.

sudo apt-get install pandoc
Pritesh Gohil
sumber
1

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

Gunakan Anda juga dapat menggunakannya dengan nbconvert:

jupyter-nbconvert --ke PDF melalui namafileHTML.ipynb

yang akan membuat file bernama filename.pdf.

atau pip install notebook-as-pdf

buat pdf dari notebook jupyter-nbconvert-toPDFviaHTML

Dhiren Biren
sumber
0

Apa yang saya temukan adalah bahwa nbconvert / utils / pandoc.py memiliki bug kode yang mengakibatkan kesalahan pada mesin saya. Kode tersebut memeriksa apakah pandoc ada di jalur variabel lingkungan Anda. Untuk mesin saya, jawabannya tidak. Bagaimanapun pandoc.exe adalah!

Solusinya adalah menambahkan '.exe' ke kode di baris 69

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

Hal yang sama berlaku untuk 'xelatex' tidak diinstal. Tambahkan ke file nbconvert / exporters / pdf.py pada baris 94

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

Untuk pengguna Ubuntu, jawabannya dapat ditemukan di sini . Saya juga mengutipnya:

Penyebab yang paling mungkin, adalah Anda belum menginstal dependensi yang sesuai. Sistem Ubuntu Anda harus memiliki beberapa paket yang diinstal mengenai konversi file LaTeX dan XeTeX, untuk menyimpan notebook Anda sebagai PDF. Anda dapat menginstalnya dengan:

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

Juga, nbconvertketergantungan lain yang biasanya dipasang secara otomatis dengan jupyter. Tetapi Anda dapat menginstalnya hanya untuk memastikan, saat lingkungan virtual Anda diaktifkan:

pip install -U nbconvert
pgmank
sumber
0

Saya mengalami masalah dalam menampilkan beberapa simbol dengan benar dengan unduhan biasa sebagai pdf . Jadi diunduh sebagai tex jupyter nbconvert --to latex "my notebook.ipynb", buat beberapa tweak dengan notepad (sebagai contoh, dalam kasus saya, saya membutuhkan baris ini untuk bahasa saya

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

) lalu diekspor ke pdf dengan latex --output-format=pdf "my notebook.tex".

Namun akhirnya, namun, untuk mempertahankan karakter yang sama seperti yang Anda lihat di browser saya akhirnya menggunakan saya cetak browser Chrome: Ctrl+P Print to pdf. Itu menambahkan header dan footer yang tidak perlu tetapi yang lainnya tetap apa adanya. Tidak ada lagi kesalahan saat memproses bilah kemajuan tqdm, tidak ada lagi kode yang keluar dari halaman dan seterusnya. Sederhana seperti itu.

Lukas
sumber
0

Di sistem apa pun, langkah-langkah dasar untuk mengatur nbconvert dengan benar untuk mengonversi notebook ipython ke pdf / lateks adalah

  1. Pasang nbconvert
  2. Instal pandoc
  3. Pasang Texlive

Menginstal nbconvert

pip install nbconvert

atau conda install nbconvert

Menginstal pandoc

sudo apt-get install pandoc untuk Ubuntu

atau sudo yum install pandocuntuk CentOS

untuk yang lain kunjungi pandoc-installation

Menginstal texlive

Anda dapat menginstal paket yang direkomendasikan atau instalasi penuh. Untuk Ubuntu

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

`

Untuk orang lain dan untuk menginstal penuh texlive ikuti instruksi yang diberikan di tug sesuai sistem dan pilihan Anda.

Saya mengunduh file tar.gz dari tug-texlive-download dan mengikuti instruksi yang diberikan di TeX Live - Instalasi cepat . Instruksi instalasi dalam ringkasan:

  1. Membersihkan

    rm -rf /usr/local/texlive/2019

    rm -rf ~/.texlive2019

  2. Jalankan penginstal

    buka file zip

    cd /your/unpacked/directory

    perl install-tl

    Masukkan perintah: i

  3. Jalur pengaturan

    sudo vi /etc/bash.bashrc dan masukkan

    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. Mengatur ukuran kertas default

    tlmgr paper letter

Perintahnya mungkin berbeda sesuai sistem Anda tetapi langkah dasarnya tetap sama.

Manojk07
sumber
0

Saya mengalami kesalahan ini di Windows 10. Saya mengikuti tiga langkah ini dan itu menyelesaikan masalah saya:

  1. Pasang nbconvert

    pip instal nbconvert

  2. Instal pandoc

https://pandoc.org/installing.html

  1. Instal miktex

https://miktex.org/download


Juga bagus untuk memperbarui perpustakaan:

pip install jupyter --upgrade
pip install --upgrade --user nbconvert
mah65
sumber