IPython / Jupyter Dizüstü bilgisayarı PDF olarak kaydetme sorunları


88

Yani, bir jupyter not defterini PDF olarak kaydetmeye çalışıyorum ama bunu nasıl yapacağımı bulamıyorum. Denediğim ilk şey, dosya menüsünden sadece PDF olarak indirmektir, ancak bunu yapmak:

nbconvert failed: PDF creating failed

denediğim bir sonraki şey, Komut İstemi'nden bu şekilde dönüştürmeyi denemek

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

ama yine, bu bir hata mesajıyla sonuçlanır

ImportError: No module named 'PDF'

ve eğer denersem

$ ipython nbconvert --to latex MyNotebook.ipynb 

bu sonuçlanır

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

pandoc ( pip install pandoc) yüklemeye çalışırsam , bu bana

ImportError: No module named 'ConfigParser'

ve burası sıkıştığım yer çünkü başka ne yapacağımı bilmiyorum. Yanlış olanı nasıl düzelteceğine dair bir fikri olan var mı?


2
pdf oluşturmak pitonik olmayan bağımlılıklar gerektirir (yani pandocve latex)
cel

4
Bu, bu özelliği kullanmadan önce bunları yüklemeniz gerektiği anlamına gelir. Ve bunlar python paketleri değil, bu yüzden pip kullanamazsınız.
cel

1
pandoc Haskell'de yazılmıştır.
Thomas K.

Yanıtlar:


34

Çalışması için lateks, tipik ekstra lateks ve pandoc kurdum.

Ubuntu ile:

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

birkaç kez alır: indirmek için birkaç 100 Mb. --no-install-recommendsTexlive için kullanabileceğiniz bir yerde okudum ve dl'ye indirgemek için fazlası.


9
Benimki gerekli pandocve texlive-xetex.
douggard

Ask_ubuntu'da daha küçük bir paket listesi buldum .
Eric Duminil

2
@ Douggard'ın önerdiği dışında bu sorunutexlive-generic-extra çözmek için de ihtiyacım vardı . texlive-xetex
pgmank

Çok teşekkürler, çok yardımcı oldu :)
farnaz jazayeri

30

Mac kullanıyorsanız ve Homebrew yüklüyse, bir terminal kabuğu açın ve şu komutu yazarak pandoc kurun :

brew install pandoc

sabırlı olun, yavaş internet bağlantılarında veya eski sistemlerde kurulum ve derleme süresi biraz zaman alabilir.


3
Bu, OS X 10.10'da çalıştı. Artık LaTeX ve PDF'ye dönüştürebiliyorum. (Pandoc'daki kurulumum bir dakikadan az sürdü ... Bileşenlerin çoğu zaten sistemimde olmalı.) TEŞEKKÜRLER!
drpetermolnar

1
@drpetermolnar Bu da benim için çalıştı (OSX 10.11.6). 2 dakika sürdü.
timothyjgraham

1
@Akshay, komut: ipython nbconvert - PDF'ye <not defteriniz> .ipynb
Andrea

@AndreaNalon Yukarıda belirtilen komut çalışmıyor, stackoverflow.com/questions/43247818/…
Akshay Khale

OSX 10.13.06 için yapmak zorundaydım: brew install pandocve brew cask install mactex-no-gui.
bue

12

2015-4-22: Bir IPython güncellemesi, bunun --to pdfyerine kullanılması gerektiği anlamına geliyor --to latex --post PDF. Bununla ilgili bir Github sorunu var .


10

Defterleri PDF'ye dönüştürmek için önce nbconvert'ın kurulu olması gerekir.

pip install nbconvert
# OR
conda install nbconvert

Ardından, Anaconda'yı kullanmıyorsanız veya henüz kullanmadıysanız, pandoc'u web sitesindeki talimatları izleyerek veya Linux'ta aşağıdaki gibi yüklemelisiniz :

sudo apt-get install pandoc

Bundan sonra, makinenize XeTex'in kurulu olması gerekir:

Artık IPython Not Defterinizin bulunduğu klasöre gidebilir ve aşağıdaki komutu çalıştırabilirsiniz:

jupyter nbconvert --to pdf MyNotebook.ipynb

daha fazla referans için lütfen bu bağlantıya göz atın .


4

Soruya yapılan yorumların dediği gibi, pandoc ve latekse ihtiyacınız olacak (örneğin, TeXShop). Pandoc'u Homebrew ile kurdum, sadece bir saniye sürdü. Pandoc ve TeXShop'a sahip olarak lateks üretebilirdim ama pdf üretemedim (komut satırında).

ipython nbconvert --to latex mynotebook.ipynb

Lateks (.tex) dosyasını TeXShop ile araştırırken, başarısızlık, eksik stil sayfaları ve tanımlardan kaynaklanıyordu. Tüm bunları (Adjustbox.sty, adjcalc.sty, trimclip.sty, Collectbox.sty, tc-pgf.def, ucs.sty, uni-global.def, utf8x.def, ucsencs.def) yükledikten sonra, sonunda iş.

Ancak sonuç benim zevkime göre biraz fazla korkak görünüyor. Safari'den html yazdırmanın sözdizimi rengini kaybetmesi çok kötü. Aksi takdirde, o kadar da kötü görünmüyor. (Bunların hepsi OS X'te).


1
Aşağıdaki kısa satır, derleme yoluyla oluşturulan hiçbir ara dosya bırakmadan doğrudan bir PDF dosyası oluşturdu. jupyter nbconvert --to pdf filename.ipynb
llinfeng

En azından şimdi renkli baskı için bir düzeltmeleri var, böylece HTML'yi doğrudan PDF'ye yazdırmak daha az kötü: github.com/jupyter/notebook/issues/840
flutefreak7

3

Bu Python komut dosyası, gezginle birlikte pdf'ye dönüştürmek istediğiniz bir Ipython Not Defterini seçmek için GUI'ye sahiptir. Wkhtmltopdf yaklaşımı, işe yaradığını ve yüksek kaliteli pdf'ler sağladığını bulduğum tek yaklaşımdır. Burada açıklanan diğer yaklaşımlar sorunludur, sözdizimi vurgulama çalışmaz veya grafikler karışıktır.

Wkhtmltopdf: http://wkhtmltopdf.org/downloads.html kurmanız gerekir

ve Nbconvert

pip install nbconvert
# OR
conda install nbconvert

Python komut dosyası

# 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 bir stackoverflow yanıtı için biraz uzun ve sadece wkhtml'yi sarıyor. Wkhtml komut satırı seçeneklerini ve bir örnek koyarsanız cevabın daha net olacağını düşünüyorum.
Hugh Perkins

yani temel olarak, nbconverthtml'ye dışa aktarmak için, ardından pdf'ye wkhtmltopdfdönüştürmek için kullanıyorsunuz . ama cevabınızdan bu net değil :-)
Hugh Perkins

Ben de bunu denedim. Doğrudan pdf'ye dışa aktarmaktan etkili şekilde daha iyidir. Garip bir şekilde, matematik jax'ımın bir kısmı doğru bir şekilde (belgenin başlangıcında) işleniyor ve sonra belgeye yaklaşık 12 sayfalık bir neden olmaksızın işlemeyi durduruyor.
Hugh Perkins

3

Anaconda-Jupyter Notebook'u İşletim Sisteminde kullanıyorum: Python programlama için Ubuntu 16.0.

Nbconvert, Pandoc ve Tex'i kurun:

Bir terminal açın ve içine aşağıdaki komutları uygulayın.

Nbconvert'i kurun: Jupyter ekosisteminin bir parçası olmasına rağmen yine de onu bir kez daha kuruyor

$conda install nbconvert

Veya

$pip install nbconvert

Ama anaconda kullanıyorsanız pip yerine conda kullanmanızı tavsiye ederim

Pandoc'u kurun: Nbconvert, markdown'u HTML dışındaki biçimlere dönüştürmek için Pandoc'u kullandığından. Aşağıdaki komutu yazın

$sudo apt-get install pandoc

TeX'i yükleyin: PDF'ye dönüştürmek için nbconvert, TeX'i kullanır. Aşağıdaki komutu yazın

$sudo apt-get install texlive-xetex

Bu komutları uyguladıktan sonra, açılan not defterlerini kapatın, ana sayfayı yenileyin veya açılan not defterinin çekirdeğini yeniden başlatın. Şimdi not defterini pdf olarak indirmeyi deneyin :)

Not: Daha fazla ayrıntı için lütfen resmi belgelere bakın:
https://nbconvert.readthedocs.io/en/latest/install.html


2

Herhangi bir Jupyter not defterini PDF'ye dönüştürmek için lütfen aşağıdaki talimatları izleyin:

( Jupyter not defterinin içinde olun ):

On Mac OS :

command + P -> bir yazdırma iletişim kutusu göreceksiniz -> hedefi PDF olarak değiştirin -> Yazdır'a tıklayın

On Windows'un :

Ctrl + P -> bir yazdırma iletişim kutusu göreceksiniz -> hedefi PDF olarak değiştirin -> Yazdır'a tıklayın

Yukarıdaki adımlar Jupyter not defterinin tam PDF dosyasını oluşturmazsa (muhtemelen Chrome, bazen Jupyter büyük çıktılar için bir kaydırma yaptığı için tüm çıktıları yazdırmaz),

Menüdeki otomatik kaydırmayı kaldırmak için aşağıdaki adımları gerçekleştirmeyi deneyin : -

Kredi: @ ÂngeloPolotto

  1. Senin Jupyter Notebook yılında tıklayın Cell jupyter defterin üstünde görüntü açıklamasını buraya girin

  2. Sonraki tıklayın Tüm çıkış > - Geçiş kaydırma otomatik kaydırma kaldırmak için.

görüntü açıklamasını buraya girin


Katılıyorum, ancak Chrome bazen tüm çıktıları yazdırmıyor çünkü Jupyter büyük çıktılar için bir kaydırma yapıyor. Hücre-> Tüm Çıktılar-> Kaydırmayı Değiştir (referans: stackoverflow.com/a/52803744/6846888 )
Ângelo Polotto

Bu bilgiyi cevabınıza ekleyebilir misiniz? Bu, daha fazla kullanıcı için çok yararlı olabilir.
Ângelo Polotto

1
Evet @ ÂngeloPolotto, bilgilerinizi cevabıma ekledim.
MobileDev

1

Bu sorun hem Ubuntu hem de Mac OSX ile yaşandı. Çılgınca bir dizi arama ve denemeden sonra ikisi de çözüldü. Bu hem texve hem de gerektirir pandoc; her iki jumbo harici program Python tarafından kurulamaz pip.

Mac OSX: pandoc'un MacPorts yüklemesini kullanma

port install pandoc

Bu işlemin tamamlanması yaklaşık bir saat sürecektir ( normal durumda). Sorun devam ederse, MacTeX dağıtımını yüklemeniz gerekebilir. TeXLive.

Ubuntu için: vanilyalı texlive yüklemek ağ yükleyici - değil apt-get ile . Ardından apt-get kullanarak pandoc'u kurun.

sudo apt-get install pandoc

TeXLive'in eksiksiz kurulumu, diskte 4,4 GB'a kadar bir disk gerektirir.

Tüm bu sorunlardan kurtulmak için IPython / Jupyter Notebook'u kullanmanın önerilen yolu Anaconda Python dağıtımını kurmak olacaktır.


1

Bunu çözerken de her türlü problemim oldu. Tam olarak ihtiyacınız olanı sağlayıp sağlamayacağını bilmiyorum, ancak not defterimi HTML dosyası olarak indirdim, ardından Chrome tarayıcımda açtım ve kaydettiğim bir PDF dosyası olarak yazdırdım. Tüm kodumu, metnimi ve grafikleri yakaladı. İhtiyacım olan şey için yeterince iyiydi.


1
Benim durumumda, html çok uzun olsa bile sayfa başına bir hücre koyuyor. Yani çözüm değil
Juh_

1

Sagemath bulut sürümünü kullanıyorsanız , sol köşeye gidip
Dosya -> Farklı indir -> LaTeX aracılığıyla Pdf (.pdf) 'i
seçebilirsiniz. İsterseniz ekran görüntüsünü kontrol edin.

Ekran görüntüsü ipynb'i pdf'ye dönüştürme

Herhangi bir nedenle işe yaramazsa, başka bir yol deneyebilirsiniz.
Dosya -> Baskı Önizleme'yi seçin ve ardından önizlemede
-> Yazdır'a sağ tıklayın ve ardından pdf olarak kaydet'i seçin.


Ve bu işe yaramazsa, komut satırında doğrudan nbconvert'ı kullanabilir ve lateks sorununa neyin neden olduğunu tam olarak görebilirsiniz.
William Stein

1

Yepyeni bir üye olarak, gönderiye bir yorum ekleyemedim, ancak Phillip Schwartz'ın sunduğu çözümün benim için işe yaradığını ikinci olarak söylemek istiyorum. Umarım benzer durumdaki insanlar bu yolu daha erken deneyeceklerdir. Sayfa aralarının olmaması uzun bir süredir sinir bozucu bir sorundu, bu yüzden yukarıdaki tartışma için minnettarım.

Phillip Schwartz'ın dediği gibi: "wkhtmltopdf: [ http://wkhtmltopdf.org/downloads.html][1]

ve Nbconvert "

Daha sonra "rawNBConvert" türünde bir hücre eklersiniz ve şunları dahil edersiniz:

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

Bu benim için hile yapıyor gibiydi ve oluşturulan PDF'nin ilgili konumlarda sayfa sonu vardı. Not defterini HTML olarak indirmenin, tarayıcıda açmanın ve bu yardımcı programlar yüklendikten sonra PDF'ye yazdırmanın "normal" yolu gibi göründüğü için özel kodu çalıştırmanıza gerek yoktur.


1

.İpynb'i pdf'ye dönüştürmek için sisteminizin 2 bileşen içermesi gerekir,

  1. nbconvert : Jupyter'in bir parçasıdır, ipynb'i pdf'ye dönüştürmeye izin verir

    pip install nbconvert
    OR 
    conda install nbconvert
    
  2. XeTeX: ipynb'i .tex formatına dönüştürün ve ardından pdf'ye dönüştürün.

    sudo apt-get install texlive-xetex
    

Daha sonra pdf'ye dönüştürmek için aşağıdaki komutu kullanabilirsiniz,

ipython nbconvert --to pdf YOURNOTEBOOK.ipynb

Çalışmazsa pandoc'u kurun ve tekrar deneyin.

sudo apt-get install pandoc

1

notebook-as-pdfInstall python -m pip notebook-as-pdf pyppeteer-install yükle

Kullanın Ayrıca nbconvert ile de kullanabilirsiniz:

jupyter-nbconvert - PDFviaHTML dosya adına.ipynb

dosyaadı.pdf adlı bir dosya oluşturacaktır.

veya pdf olarak dizüstü bilgisayarı kurun

jupyter-nbconvert-toPDFviaHTML defterinden pdf oluşturun


0

Bulduğum şey, nbconvert / utils / pandoc.py'nin makinemde hataya neden olan bir kod hatası olduğuydu. Kod, pandoc'un çevresel değişkenler yolunuzda olup olmadığını kontrol eder. Makinem için cevap hayır. Ancak pandoc.exe!

Çözüm, 69. satırdaki koda '.exe' eklemekti

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

Aynı şey 'xelatex' kurulu olmadığı için de geçerlidir. 94. satırdaki nbconvert / exporters / pdf.py dosyasına ekleyin

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

0

Ubuntu kullanıcıları için bir cevap burada bulunabilir . Ayrıca alıntı yapıyorum:

En olası neden, uygun bağımlılıkları kurmamış olmanızdır. Dizüstü bilgisayarınızı PDF olarak kaydetmek için Ubuntu sisteminizde LaTeX ve XeTeX dosyalarının dönüştürülmesiyle ilgili bazı paketlerin kurulu olması gerekir. Bunları şu şekilde kurabilirsiniz:

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

Ayrıca, nbconvertgenellikle jupyter ile otomatik olarak yüklenen başka bir bağımlılıktır. Ancak, sanal ortamınızı etkinleştirirken emin olmak için kurabilirsiniz:

pip install -U nbconvert

0

Düzenli olarak pdf olarak indirirken bazı sembolleri doğru şekilde görüntülemekte sorun yaşadım . Bu yüzden metin olarak indirildi jupyter nbconvert --to latex "my notebook.ipynb", not defteri ile bazı ince ayarlar yapıldı (örnek olarak, benim durumumda bu satırlara dilim için ihtiyacım vardı

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

) ve ardından ile pdf'ye aktarıldı latex --output-format=pdf "my notebook.tex".

Eğer benim Chrome tarayıcı baskı kullanılarak sona erdi tarayıcıda gördüğünüz gibi Fakat sonunda, ancak, aynı karakterleri korumak için: Ctrl+P Print to pdf. Gereksiz üstbilgi ve altbilgi ekler ancak diğer her şey olduğu gibi kalır. Tqdm ilerleme çubuğunu işlerken daha fazla hata yok, sayfadan daha fazla kod çıkmıyor vb. Bu kadar basit.


0

Herhangi bir sistemde, ipython dizüstü bilgisayarları pdf / latekse dönüştürmek için nbconvert'ı doğru şekilde kurmanın temel adımları şunlardır:

  1. Nbconvert'ı yükleyin
  2. Pandoc'u yükleyin
  3. Texlive'i yükleyin

Nbconvert kurulumu

pip install nbconvert

veya conda install nbconvert

Pandoc kurulumu

sudo apt-get install pandoc Ubuntu için

veya sudo yum install pandocCentOS için

diğerleri için pandoc kurulumunu ziyaret edin

Texlive yükleniyor

Önerilen paketleri veya tam kurulumu kurabilirsiniz. Ubuntu için

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

'

Diğerleri için ve texlive'ı tam olarak kurmak için sisteminize ve seçiminize göre römorkörde verilen talimatları izleyin .

Tug-texlive- download'dan tar.gz dosyasını indirdim ve TeX Live - Hızlı kurulum'da verilen talimatları izledim . Özet olarak kurulum talimatları:

  1. Temizlemek

    rm -rf /usr/local/texlive/2019

    rm -rf ~/.texlive2019

  2. Yükleyiciyi çalıştır

    zip dosyasını aç

    cd /your/unpacked/directory

    perl install-tl

    Komut girin: i

  3. Yol ayarlama

    sudo vi /etc/bash.bashrc ve ekle

    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. Varsayılan kağıt boyutunu ayarlama

    tlmgr paper letter

Komutlar sisteminize göre farklılık gösterebilir ancak temel adımlar aynı kalır.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.