IPython / Jupyter Sự cố khi lưu sổ ghi chép dưới dạng PDF


86

Vì vậy, tôi đã cố gắng lưu một sổ ghi chép jupyter dưới dạng PDF nhưng tôi không thể tìm ra cách thực hiện việc này. Điều đầu tiên tôi thử là từ menu tệp chỉ cần tải xuống dưới dạng PDF, nhưng làm điều đó dẫn đến:

nbconvert failed: PDF creating failed

điều tiếp theo tôi thử là cố gắng thực hiện chuyển đổi từ Command Prompt như thế này

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

nhưng một lần nữa, điều này dẫn đến một thông báo lỗi

ImportError: No module named 'PDF'

và nếu tôi cố gắng

$ ipython nbconvert --to latex MyNotebook.ipynb 

kết quả này trong

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

nếu tôi cố gắng cài đặt pandoc ( pip install pandoc), điều này mang lại cho tôi

ImportError: No module named 'ConfigParser'

và đây là nơi tôi gặp khó khăn bởi vì tôi không biết phải làm gì khác. Bất cứ ai có ý tưởng làm thế nào để sửa chữa bất cứ điều gì là sai?


2
tạo pdf yêu cầu phụ thuộc không phải pythonic (tức là pandoclatex)
cel

4
Điều đó có nghĩa là bạn phải cài đặt chúng trước khi có thể sử dụng tính năng này. Và chúng không phải là gói python, do đó bạn không thể sử dụng pip.
cel

1
pandoc được viết bằng Haskell.
Thomas K,

Câu trả lời:


33

Để làm cho nó hoạt động, tôi đã cài đặt latex, latex bổ sung điển hình và pandoc.

Với ubuntu:

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

mất một số thời gian: vài 100 Mb để tải xuống. Tôi đọc ở đâu đó rằng bạn có thể sử dụng --no-install-recommendscho texlive và thêm để giảm xuống dl.


8
Yêu cầu của tôi pandoctexlive-xetex.
douggard

Tôi đã tìm thấy danh sách các gói nhỏ hơn trên ask_ubuntu .
Eric Duminil

1
Tôi cũng cần texlive-generic-extragiải quyết vấn đề này , ngoài texlive-xetex@douggard đã đề xuất.
pgmank

Cảm ơn rất nhiều, đó là một sự giúp đỡ tuyệt vời :)
farnaz jazayeri

30

Nếu bạn đang sử dụng máy Mac và đã cài đặt Homebrew, hãy mở terminal shell và cài đặt pandoc, gõ lệnh:

brew install pandoc

hãy kiên nhẫn, thời gian cài đặt và biên dịch có thể mất một lúc trên kết nối internet chậm hoặc hệ thống cũ hơn.


3
Điều này đã hoạt động trên OS X 10.10. Bây giờ tôi có thể chuyển đổi sang LaTeX và PDF. (Quá trình cài đặt của tôi trên pandoc mất chưa đầy một phút ... Tôi hẳn đã có hầu hết các thành phần trên hệ thống của mình.) THANKS!
drpetermolnar

1
@drpetermolnar Điều này cũng hiệu quả với tôi (OSX 10.11.6). Mất 2 phút.
timothyjgraham.

1
@Akshay, lệnh là: ipython nbconvert --to PDF <sổ tay của bạn> .ipynb
Andrea

@AndreaNalon Lệnh đề cập ở trên không hoạt động, stackoverflow.com/questions/43247818/...
Akshay Khale

Đối với OSX 10.13.06, tôi phải làm: brew install pandocbrew cask install mactex-no-gui.
bue

12

2015-4-22: Có vẻ như bản cập nhật IPython có nghĩa là --to pdfnên được sử dụng thay vì --to latex --post PDF. Có một vấn đề liên quan đến Github .


10

Để chuyển sổ tay sang PDF, trước tiên bạn cần cài đặt nbconvert.

pip install nbconvert
# OR
conda install nbconvert

Tiếp theo, nếu bạn chưa sử dụng Anaconda hoặc chưa sử dụng, bạn phải cài đặt pandoc bằng cách làm theo hướng dẫn trên trang web của họ hoặc trên Linux, như sau:

sudo apt-get install pandoc

Sau đó, bạn cần cài đặt XeTex trên máy của mình:

Bây giờ bạn có thể điều hướng đến thư mục chứa IPython Notebook của bạn và chạy lệnh sau:

jupyter nbconvert --to pdf MyNotebook.ipynb

để tham khảo thêm, vui lòng kiểm tra liên kết này .


4

Như các nhận xét cho câu hỏi, bạn sẽ cần pandoc và latex (ví dụ: TeXShop). Tôi đã cài đặt pandoc bằng Homebrew, chỉ mất một giây. Có pandoc và TeXShop, tôi có thể tạo latex nhưng không phải pdf (trên dòng lệnh).

ipython nbconvert --to latex mynotebook.ipynb

Khám phá tệp latex (.tex) bằng TeXShop, lỗi là do thiếu bảng định kiểu và định dạng. Sau khi cài đặt tất cả những thứ này (Adjustbox.sty, adjcalc.sty, trimclip.sty, collectbox.sty, tc-pgf.def, ucs.sty, uni-global.def, utf8x.def, ucsencs.def), cuối cùng thì công việc.

Tuy nhiên, kết quả trông hơi quá thú vị so với sở thích của tôi. Thật là tệ khi việc in html từ Safari làm mất màu cú pháp. Nếu không, nó trông không quá tệ. (Tất cả đều có trên OS X).


1
Dòng ngắn sau đây trực tiếp tạo tệp PDF mà không để lại bất kỳ tệp trung gian nào được tạo thông qua biên dịch. jupyter nbconvert --to pdf filename.ipynb
llinfeng

Ít nhất là họ có một sửa chữa cho in ấn với màu sắc ngay bây giờ để in trực tiếp HTML sang PDF là ít xấu: github.com/jupyter/notebook/issues/840
flutefreak7

3

Tập lệnh Python này có GUI để chọn với explorer một Ipython Notebook mà bạn muốn chuyển đổi sang pdf. Cách tiếp cận với wkhtmltopdf là cách tiếp cận duy nhất mà tôi thấy hoạt động tốt và cung cấp pdf chất lượng cao. Các cách tiếp cận khác được mô tả ở đây có vấn đề, đánh dấu cú pháp không hoạt động hoặc đồ thị bị lộn xộn.

Bạn sẽ cần cài đặt wkhtmltopdf: http://wkhtmltopdf.org/downloads.html

và Nbconvert

pip install nbconvert
# OR
conda install nbconvert

Tập lệnh 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 khá dài đối với một câu trả lời stackoverflow thực sự và chỉ gói gọn trong wkhtml. Tôi nghĩ câu trả lời sẽ rõ ràng hơn nếu bạn chỉ đặt các tùy chọn dòng lệnh cho wkhtml và một ví dụ.
Hugh Perkins

về cơ bản, bạn đang sử dụng nbconvertđể xuất sang html, sau đó sử dụng wkhtmltopdfđể chuyển đổi sang pdf. nhưng điều này không rõ ràng từ câu trả lời của bạn :-)
Hugh Perkins

Vì vậy, tôi đã thử điều này. Nó có hiệu quả tốt hơn xuất trực tiếp sang pdf. Thật kỳ lạ, một số mathjax của tôi được hiển thị chính xác (ở đầu tài liệu), và sau đó nó ngừng hiển thị, khoảng 12 trang trong tài liệu mà không có lý do rõ ràng.
Hugh Perkins

3

Tôi đang sử dụng Anaconda-Jupyter Notebook trên OS: Ubuntu 16.0 để lập trình Python.

Cài đặt Nbconvert, Pandoc và Tex:

Mở một thiết bị đầu cuối và thực hiện các lệnh sau trong đó.

Cài đặt Nbconvert: mặc dù nó là một phần của hệ sinh thái Jupyter vẫn cài đặt nó một lần nữa

$conda install nbconvert

Hoặc là

$pip install nbconvert

Nhưng tôi sẽ khuyên bạn nên sử dụng conda thay vì pip nếu bạn đang sử dụng anaconda

Cài đặt Pandoc: vì Nbconvert sử dụng Pandoc để chuyển đổi đánh dấu sang các định dạng khác ngoài HTML. Gõ lệnh sau

$sudo apt-get install pandoc

Cài đặt TeX: Để chuyển đổi sang PDF, nbconvert sử dụng TeX. Gõ lệnh sau

$sudo apt-get install texlive-xetex

Sau khi thực hiện các lệnh này, đóng sổ ghi chép đã mở, làm mới trang chủ Hoặc khởi động lại hạt nhân của sổ ghi chép đã mở. Bây giờ hãy thử tải xuống sổ tay dưới dạng pdf :)

Lưu ý: Để biết thêm chi tiết, vui lòng tham khảo tài liệu chính thức:
https://nbconvert.readthedocs.io/en/latest/install.html


2

Để chuyển đổi bất kỳ sổ ghi chép Jupyter nào sang PDF, vui lòng làm theo hướng dẫn sau:

( Hãy ở trong sổ ghi chép Jupyter ):

Trên Mac OS :

command + P -> bạn sẽ nhận được hộp thoại in -> thay đổi đích đến dưới dạng PDF -> Bấm in

Trên Windows :

Ctrl + P -> bạn sẽ nhận được hộp thoại in -> thay đổi đích dưới dạng PDF -> Bấm in

Nếu các bước trên không tạo ra PDF đầy đủ của sổ ghi chép Jupyter (có thể là do Chrome, đôi khi, không in tất cả các đầu ra vì Jupyter tạo cuộn cho các đầu ra lớn),

Hãy thử thực hiện các bước dưới đây để loại bỏ cuộn tự động trong menu : -

Tín dụng: @ ÂngeloPolotto

  1. Trong Máy tính xách tay Jupyter của bạn, nhấp vào di động trên máy tính xách tay jupyter nhập mô tả hình ảnh ở đây

  2. Tiếp theo nhấp vào Tất cả đầu ra -> Chuyển đổi cuộn để loại bỏ cuộn tự động.

nhập mô tả hình ảnh ở đây


Tôi đồng ý, nhưng Chrome, đôi khi, không in tất cả các đầu ra vì Jupyter tạo cuộn cho các đầu ra lớn. Bạn cần loại bỏ các cuộn tự động trong Cell- menu> Tất cả đầu ra thực> Chuyển sang cuộn (tham khảo: stackoverflow.com/a/52803744/6846888 )
Ângelo Polotto

Bạn có thể thêm thông tin này trong câu trả lời của bạn? Điều này có thể rất hữu ích cho nhiều người dùng hơn.
Ângelo Polotto

1
Có @ ÂngeloPolotto, tôi đã thêm thông tin của bạn trong câu trả lời của tôi.
Akshay Ramesh

1

Sự cố này đã gặp phải với cả Ubuntu và Mac OSX. Sau một loạt tìm kiếm và thử nghiệm điên cuồng, cả hai đều đã được giải quyết. Điều này đòi hỏi cả hai texpandoc; Cả hai chương trình bên ngoài jumbo không thể được cài đặt bởi Python pip.

Mac OSX: sử dụng cài đặt MacPorts của pandoc

port install pandoc

Quá trình này sẽ mất gần một giờ để hoàn thành (trong trường hợp thông thường ). Nếu sự cố vẫn tiếp diễn, bạn có thể phải cài đặt bản phân phối MacTeX. của TeXLive.

Đối với Ubuntu: cài đặt vanilla TeXLive từ trình cài đặt mạng - không phải thông qua apt-get . Sau đó cài đặt pandoc bằng apt-get.

sudo apt-get install pandoc

Một bản cài đặt hoàn chỉnh của TeXLive sẽ yêu cầu tối đa 4,4 GB trên đĩa.

Để giải quyết tất cả rắc rối này, cách được đề xuất để sử dụng IPython / Jupyter Notebook sẽ là cài đặt bản phân phối Anaconda Python.


1

Tôi cũng gặp phải mọi vấn đề khi tìm ra điều này. Tôi không biết liệu nó có cung cấp chính xác những gì bạn cần hay không, nhưng tôi đã tải xuống sổ ghi chép của mình dưới dạng tệp HTML, sau đó kéo nó lên trong trình duyệt Chrome của mình và sau đó in nó dưới dạng tệp PDF mà tôi đã lưu. Nó nắm bắt tất cả mã, văn bản và đồ thị của tôi. Nó đủ tốt cho những gì tôi cần.


1
Trong trường hợp của tôi, html đặt một ô trên mỗi trang ngay cả khi nó quá dài. Vì vậy, không phải là một giải pháp
Juh_

1

Nếu bạn đang sử dụng phiên bản đám mây sagemath , bạn có thể chỉ cần vào góc bên trái,
chọn Tệp -> Tải xuống dưới dạng -> Pdf qua LaTeX (.pdf)
Kiểm tra ảnh chụp màn hình nếu muốn.

Ảnh chụp màn hình Chuyển đổi ipynb sang pdf

Nếu nó không hoạt động vì bất kỳ lý do gì, bạn có thể thử cách khác.
chọn Tệp -> Xem trước Bản in và sau đó
nhấp chuột phải vào bản xem trước -> In và sau đó chọn lưu dưới dạng pdf.


Và nếu điều đó không hiệu quả, bạn có thể sử dụng trực tiếp nbconvert trên dòng lệnh và xem chính xác điều gì đang gây ra sự cố latex.
William Stein

1

Là một thành viên hoàn toàn mới, tôi không thể chỉ cần thêm nhận xét về bài đăng nhưng tôi muốn thứ hai rằng giải pháp do Phillip Schwartz đưa ra đã hiệu quả với tôi. Hy vọng rằng những người trong hoàn cảnh tương tự sẽ thử con đường đó sớm hơn với sự nhấn mạnh. Không có ngắt trang là một vấn đề khó chịu trong một thời gian khá dài vì vậy tôi rất biết ơn về cuộc thảo luận ở trên.

Như Phillip Schwartz đã nói: "Bạn sẽ cần cài đặt wkhtmltopdf: [ http://wkhtmltopdf.org/downloads.html][1]

và Nbconvert "

Sau đó, bạn thêm một ô thuộc loại "rawNBConvert" và bao gồm:

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

Điều đó dường như thực hiện được một mẹo nhỏ đối với tôi và tệp PDF được tạo đã bị ngắt trang tại các vị trí tương ứng. Tuy nhiên, bạn không cần phải chạy mã tùy chỉnh, vì có vẻ như đường dẫn "bình thường" để tải sổ ghi chép xuống dưới dạng HTML, mở trong trình duyệt và in sang PDF hoạt động sau khi các tiện ích đó được cài đặt.


1

notebook-as-pdfCài đặt python -m pip cài đặt notebook-as-pdf pyppeteer-install

Sử dụng nó Bạn cũng có thể sử dụng nó với nbconvert:

jupyter-nbconvert - sang PDFviaHTML filename.ipynb

sẽ tạo một tệp có tên là filename.pdf.

hoặc pip cài đặt notebook-as-pdf

tạo pdf từ sổ tay jupyter-nbconvert-toPDFviaHTML


0

Những gì tôi nhận thấy là nbconvert / utils / pandoc.py có một lỗi mã dẫn đến lỗi cho máy của tôi. Mã kiểm tra xem pandoc có trong đường dẫn biến môi trường của bạn hay không. Đối với máy của tôi, câu trả lời là không. Tuy nhiên pandoc.exe là!

Giải pháp là thêm '.exe' vào mã trên dòng 69

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

Tương tự đối với 'xelatex' không được cài đặt. Thêm vào tệp nbconvert / exporters / pdf.py trên dòng 94

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

0

Để chuyển đổi .ipynb thành pdf, hệ thống của bạn phải chứa 2 thành phần,

  1. nbconvert : Là một phần của jupyter cho phép chuyển đổi ipynb sang pdf

    pip install nbconvert
    OR 
    conda install nbconvert
    
  2. XeTeX: Chuyển đổi ipynb sang định dạng .tex và sau đó chuyển đổi sang pdf.

    sudo apt-get install texlive-xetex
    

Sau đó, bạn có thể sử dụng lệnh dưới đây để chuyển đổi sang pdf,

ipython nbconvert --to pdf YOURNOTEBOOK.ipynb

Trong trường hợp, nó không hoạt động, hãy cài đặt pandoc và thử lại.

sudo apt-get install pandoc

0

Đối với người dùng Ubuntu, câu trả lời có thể được tìm thấy tại đây . Tôi cũng trích dẫn nó:

Nguyên nhân có thể xảy ra nhất là bạn chưa cài đặt các phụ thuộc thích hợp. Hệ thống Ubuntu của bạn phải cài đặt một số gói liên quan đến chuyển đổi tệp LaTeX và XeTeX, để lưu sổ ghi chép của bạn dưới dạng PDF. Bạn có thể cài đặt chúng bằng cách:

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

Ngoài ra, nbconvertlà một phụ thuộc khác thường được cài đặt tự động với jupyter. Nhưng bạn có thể cài đặt nó chỉ để chắc chắn, trong khi kích hoạt môi trường ảo của bạn:

pip install -U nbconvert

0

Tôi đã gặp sự cố khi hiển thị chính xác một số ký hiệu khi tải xuống thông thường dưới dạng pdf . Vì vậy, đã tải xuống dưới dạng tex jupyter nbconvert --to latex "my notebook.ipynb", thực hiện một số chỉnh sửa với notepad (ví dụ: trong trường hợp của tôi, tôi cần những dòng này cho ngôn ngữ của mình

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

) và sau đó xuất sang pdf với latex --output-format=pdf "my notebook.tex".

Nhưng cuối cùng, tuy nhiên, để giữ lại các nhân vật giống như bạn thấy trong một trình duyệt tôi đã kết thúc sử dụng in trình duyệt Chrome của tôi: Ctrl+P Print to pdf. Nó thêm đầu trang và chân trang không cần thiết nhưng mọi thứ khác vẫn như cũ. Không còn lỗi khi xử lý thanh tiến trình tqdm, không còn mã nào ra khỏi trang, v.v. Đơn giản như thế.


0

Trong bất kỳ hệ thống nào, các bước cơ bản để thiết lập chính xác nbconvert để chuyển đổi sổ ghi chép ipython sang pdf / latex là

  1. Cài đặt nbconvert
  2. Cài đặt pandoc
  3. Cài đặt Texlive

Cài đặt nbconvert

pip install nbconvert

hoặc là conda install nbconvert

Cài đặt pandoc

sudo apt-get install pandoc cho Ubuntu

hoặc sudo yum install pandoccho CentOS

cho những người khác, hãy truy cập pandoc-install

Cài đặt texlive

Bạn có thể cài đặt các gói khuyến nghị hoặc cài đặt đầy đủ. Đối với Ubuntu

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

`

Đối với những người khác và để cài đặt đầy đủ texlive, hãy làm theo hướng dẫn được đưa ra tại kéo theo hệ thống và sự lựa chọn của bạn.

Tôi đã tải xuống tệp tar.gz từ tug-texlive-download và làm theo hướng dẫn được đưa ra tại TeX Live - Cài đặt nhanh . Tóm tắt hướng dẫn cài đặt:

  1. Dọn dẹp

    rm -rf /usr/local/texlive/2019

    rm -rf ~/.texlive2019

  2. Chạy trình cài đặt

    giải nén tệp zip

    cd /your/unpacked/directory

    perl install-tl

    Nhập lệnh: i

  3. Đặt đường dẫn

    sudo vi /etc/bash.bashrc và chèn

    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. Đặt kích thước giấy tờ mặc định

    tlmgr paper letter

Các lệnh có thể khác nhau tùy theo hệ thống của bạn nhưng các bước cơ bản vẫn giống nhau.


0

Tôi đã gặp lỗi này trong Windows 10. Tôi đã làm theo ba bước sau và nó đã giải quyết được sự cố của tôi:

  1. Cài đặt nbconvert

    pip cài đặt nbconvert

  2. Cài đặt pandoc

https://pandoc.org/installing.html

  1. Cài đặt miktex

https://miktex.org/download


Ngoài ra, nó là tốt để cập nhật thư viện:

pip install jupyter --upgrade
pip install --upgrade --user nbconvert
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.