Làm cách nào để chuyển đổi sổ ghi chép IPython sang PDF và HTML?


89

Tôi muốn chuyển đổi ipython-notebook của mình để in chúng hoặc chỉ cần gửi chúng ở định dạng html. Tôi nhận thấy rằng đã tồn tại một công cụ để làm điều đó, nbconvert . Mặc dù tôi đã tải xuống nhưng tôi không biết cách chuyển đổi sổ ghi chép, với nbconvert2.py vì nbconvert nói rằng nó không được dùng nữa. nbconvert2.py nói rằng tôi cần một hồ sơ để chuyển đổi sổ ghi chép, đó là gì? Có tài liệu về công cụ này không?


Câu trả lời:


96

Nếu bạn đã cài đặt LaTeX, bạn có thể tải xuống dưới dạng PDF trực tiếp từ sổ ghi chép Jupyter với Tệp -> Tải xuống dưới dạng -> PDF qua LaTeX (.pdf) . Nếu không, hãy làm theo hai bước sau.

  1. Đối với đầu ra HTML, bây giờ bạn nên sử dụng Jupyter thay cho IPython và chọn Tệp -> Tải xuống dưới dạng -> HTML (.html) hoặc chạy lệnh sau:

    jupyter nbconvert --to html notebook.ipynb  
    

    Thao tác này sẽ chuyển đổi tệp tài liệu Jupyter notebook.ipynb thành định dạng đầu ra html.

    Google Colaboratory là môi trường máy tính xách tay Jupyter miễn phí của Google, không yêu cầu thiết lập và chạy hoàn toàn trên đám mây. Nếu bạn đang sử dụng Google Colab, các lệnh giống nhau, nhưng Google Colab chỉ cho phép bạn tải xuống các định dạng .ipynb hoặc .py.

  2. Chuyển đổi tệp html notebook.html thành tệp pdf được gọi là notebook.pdf. Trong Windows, Mac hoặc Linux, hãy cài đặt wkhtmltopdf . wkhtmltopdf là một tiện ích dòng lệnh để chuyển đổi html sang pdf bằng cách sử dụng WebKit. Bạn có thể tải xuống wkhtmltopdf từ trang web được liên kết hoặc trong nhiều bản phân phối Linux, nó có thể được tìm thấy trong kho của chúng.

    wkhtmltopdf notebook.html notebook.pdf   
    

Bản sửa đổi ban đầu (bây giờ gần như lỗi thời): Chuyển đổi tệp sổ ghi chép IPython thành html.

ipython nbconvert --to html notebook.ipynb


1
Mọi thứ được thu gọn thành một trang -__-
htafoya

2
Đối với đầu ra HTML, bây giờ bạn nên sử dụng jupyterthay thế cho ipythonví dụjupyter nbconvert --to html notebook.ipynb
AlexG,

Để điều này hoạt động, jupyter_contrib_nbextensions phải được cài đặt.
CharlesG

Theo câu trả lời trên, bạn cần wkhtmltopdf. Để cài đặt nó trong ubuntu 14.04, điều này làm việc cho tôi gist.github.com/brunogaspar/bd89079245923c04be6b0f92af431c10
Pradeep Singh

3
Bạn cũng có thể in trang web sang pdf.
AndiCover

17

Từ các tài liệu :

Nếu bạn muốn cung cấp cho người khác chế độ xem HTML hoặc PDF tĩnh trên sổ tay của mình, hãy sử dụng nút In. Thao tác này sẽ mở ra một chế độ xem tĩnh của tài liệu, bạn có thể in thành PDF bằng các tiện ích của hệ điều hành hoặc lưu vào một tệp với tùy chọn 'Lưu' của trình duyệt web của bạn (lưu ý rằng thông thường, thao tác này sẽ tạo cả tệp html và thư mục có tên notebook_name_files bên cạnh nó chứa tất cả thông tin kiểu cần thiết, vì vậy nếu bạn định chia sẻ cái này, bạn phải gửi thư mục cùng với tệp html chính).


1
Cảm ơn bạn! Phiên bản HTML thực sự tốt và thực sự đơn giản để có được. Tuy nhiên, tệp PDF không tốt, các biểu đồ bị cắt thành hai phần nếu chúng nằm giữa hai trang và dòng mã dài cũng bị cắt.
nunzio13n

@ nunzio13n - Ít nhất thì bạn cũng có html ... Tôi chưa sử dụng nbconvrtnên không thể giúp bạn thực sự. Hy vọng ai đó sẽ đi cùng ...
root

3
Liên kết chết. Ngoài ra, tôi không có nút in trong sổ ghi chép của mình.
Pat

Sử dụng tính năng in trong trình duyệt của bạn bằng cách sử dụng CTRL+ Ptác phẩm.
Levi Baguley

13

nbconvert vẫn chưa được thay thế hoàn toàn bằng nbconvert2, bạn vẫn có thể sử dụng nó nếu muốn, nếu không chúng tôi đã xóa tệp thực thi. Nó chỉ là một cảnh báo rằng chúng tôi không sửa lỗi nbconvert1 nữa.

Những điều sau sẽ hoạt động:

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

Nếu bạn đang sử dụng phiên bản IPython đủ gần đây, không sử dụng chế độ xem in, chỉ sử dụng hộp thoại in bình thường. Biểu đồ bị cắt trong chrome là một vấn đề đã biết (Chrome không tôn trọng một số css in) và hoạt động tốt hơn nhiều với firefox, không phải tất cả các phiên bản vẫn vậy.

Đối với nbconvert2, nó vẫn còn rất nhiều dev và cần phải viết tài liệu.

Nbviewer sử dụng nbconvert2 nên nó khá tốt với HTML.

Danh sách các cấu hình hiện có sẵn:

$ 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

Cung cấp cho bạn các cấu hình hiện có. (Bạn có thể tạo tài liệu cf tương lai của riêng mình, ./nbconvert2.py --help-allsẽ cung cấp cho bạn một số tùy chọn mà bạn có thể sử dụng trong hồ sơ của mình.)

sau đó

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

Và nó sẽ ghi các tệp (tex) của bạn miễn là các số liệu được trích xuất trong cwd. Vâng, tôi biết điều này không rõ ràng, và nó có thể sẽ thay đổi do đó không có tài liệu nào ...

Lý do cho điều đó là nbconvert2 chủ yếu sẽ là một thư viện python , nơi bạn có thể thực hiện trong mã giả:

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

Điểm truy cập sẽ đến sau, khi API được ổn định.

Tôi sẽ chỉ ra rằng @jdfreder (hồ sơ github) đang làm việc về xuất tex / pdf / sphinx và là chuyên gia tạo PDF từ tệp ipynb tại thời điểm viết bài này.


Cảm ơn bạn, bạn đã làm sáng tỏ thêm những nghi ngờ của tôi. Nhưng nbconvert2.py vẫn không hoạt động, vì nó cần cả tệp Cấu hình [NbconvertApp] Config file for profile './profile/latex_base.nbcv' not found, giving upVà nbconvert không cung cấp trực tiếp cho tôi tệp pdf mà là tệp latex, và tôi phải xử lý tệp * .tex bằng pdflatex, nhưng nó là một giải pháp tốt.
nunzio13n

Bạn có thể mở sự cố trên github và chúng tôi sẽ giải quyết vấn đề này.
Matt

Có lẽ đó không phải là vấn đề của nbconvert, nhưng đó là do tôi thiếu kiến ​​thức về nó. Có lẽ khi tài liệu xuất bản tất cả sẽ rõ ràng, ipython với notebook và nbconvert là một công việc rất hay và tôi chắc chắn rằng đó sẽ là tài liệu sớm.
nunzio13n

Điều này dường như làm mất / không cung cấp bất kỳ số ipython nào (đã hy vọng nó sẽ chuyển đổi bằng cách sử dụng chỉ thị ipython).
Andy Hayden

Có phiên bản API nào để thực hiện điều này không? Tôi thấy rằng có IPython.nbconvert.exporters.latexvà tôi tự hỏi liệu có cách nào để lấy đầu ra PDF từ đó mà không cần công cụ dòng lệnh hay không. Ngoài ra, những phụ thuộc nào để làm cho nó hoạt động? (pandoc, tetex, những thứ khác?) Và tôi cho rằng nó không phải là nền tảng chéo (sẽ không hoạt động trên Windows). TIA!
IanSR

11

Cũng vượt qua --executecờ để lấy đầu ra

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

Cách tốt nhất là giữ đầu ra không nằm ngoài sổ ghi chép để kiểm soát phiên bản, hãy xem: Sử dụng sổ ghi chép IPython dưới kiểm soát phiên bản

Nhưng sau đó, nếu bạn không vượt qua --execute, đầu ra sẽ không hiển thị trong HTML, hãy xem thêm: Làm thế nào để chạy .ipynb Jupyter Notebook từ thiết bị đầu cuối?

Đối với một đoạn HTML không có tiêu đề: Làm thế nào để xuất sổ ghi chép IPython sang HTML cho một bài đăng trên blog?

Đã thử nghiệm trong Jupyter 4.4.0.


9

Đối với những người không thể cài đặt wkhtmltopdf trong hệ thống của họ, một phương pháp khác ngoài nhiều phương pháp đã được đề cập trong câu trả lời cho câu hỏi này là chỉ cần tải xuống tệp dưới dạng tệp html từ sổ ghi chép jupyter, tải tệp đó lên HTML sang PDF và tải xuống các tệp pdf được chuyển đổi từ đó.

Tại đây, bạn có sổ ghi chép IPython (.ipynb) của mình được chuyển đổi sang cả định dạng PDF (.pdf) & HTML (.html).



4

Chỉ câu trả lời này sẽ hữu ích cho bạn nếu bạn có toán học, công thức khoa học trong tài liệu của mình. Ngay cả khi bạn không có chúng, nó vẫn hoạt động tốt.

GUI cách

  • mở sổ ghi chép jupyter mở sổ ghi chép jupyter
  • Đi tới Tệp> Tải xuống dưới dạng> HTML hoặc PDF qua LaTeX Đi tới Tệp> Tải xuống dưới dạng> HTML hoặc PDF qua LaTeX

  • Sau đó, kiểm tra thư mục Tải xuống của bạn để tìm tệp. Tái bút: Nếu LaTeX có bất kỳ lỗi nào trong khi biên dịch PDF, nó sẽ bị lỗi. Nếu điều này xảy ra, hãy tải xuống tệp HTML và sau đó sử dụng http://webpagetopdf.com/ hoặc bất kỳ dịch vụ tương tự nào khác để chuyển đổi HTML sang PDF.

Cách dòng lệnh

  • Mở thiết bị đầu cuối
  • Điều hướng đến thư mục chứa sổ ghi chép jupyter
  • gõ "jupyter nbconvert --to pdf your_jupyter_notebook.ipynb" Tái bút: Nếu không thành công, hãy thử câu trả lời của Yogesh

4

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 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.


3

Tôi chưa thể tải pdf hoạt động. Các tài liệu ngụ ý rằng tôi sẽ có thể làm cho nó hoạt động với mủ, vì vậy có thể mủ của tôi không hoạt động. 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.

Tuy nhiên, HTML hoạt động tốt khi sử dụng 'slide', và nó thật đẹp! $ ipython nbconvert --to slides myfile.ipynb ... [NbConvertApp] Writing 215220 bytes to myfile.slides.html

// Cập nhật 2014-11-07: Cú pháp IPython v3 khác, nó đơn giản hơn; $ ipython nbconvert --to PDF myfile.ipynb Trong mọi trường hợp, có vẻ như tôi đã thiếu thư viện 'pdflatex'. Tôi đang điều tra điều đó.


thử: $ ipython nbconvert your_file.ipynb --Để mủ --Quảng cáo PDF
moldovean

ty @moldovean vì đã ping tôi để tôi có cái nhìn khác về vấn đề này. Thêm googling vừa tiết lộ vấn đề. Thứ tự đối số không thành vấn đề, tôi vẫn nhận được "Không có tệp hoặc thư mục như vậy".
AnneTheAgile

đó là một vấn đề thú vị. Có lẽ ... chỉ có thể cài đặt lại ipython sẽ giúp ích .. Tôi thực sự không biết :(
moldovean

@moldovean, hóa ra là một số thư viện được yêu cầu nhưng ipynb không cài đặt được. Trong trường hợp này, tôi cần ít nhất pdflatex trên đường dẫn của mình. Xem PR của tôi để cải thiện việc kiểm tra lỗi, github.com/ipython/ipython/pull/6884
AnneTheAgile

3

Bạn có thể làm điều đó bằng cách chuyển đổi sổ ghi chép sang HTML và sau đó sang định dạng PDF:

Các bước sau tôi đã triển khai trên: Hệ điều hành: Ubuntu, sổ ghi chép Anaconda-Jupyter, Python 3

1 Lưu Notebook ở định dạng HTML:

  1. Khởi động sổ ghi chép jupyter mà bạn muốn lưu ở định dạng HTML. Trước tiên hãy lưu sổ ghi chép đúng cách để tệp HTML sẽ có phiên bản mã / sổ ghi chép được lưu mới nhất của bạn.

  2. Chạy lệnh sau từ chính sổ ghi chép:

    !jupyter nbconvert --to html your_notebook_name.ipynb

Sau khi thực thi sẽ tạo phiên bản HTML của sổ ghi chép của bạn và sẽ lưu nó trong thư mục làm việc hiện tại. Bạn sẽ thấy một tệp html sẽ được thêm vào thư mục hiện tại với your_notebook_name.htmltên

( your_notebook_name.ipynb-> your_notebook_name.html).

2 Lưu html dưới dạng PDF:

  1. Bây giờ hãy mở your_notebook_name.htmltệp đó (nhấp vào nó). Nó sẽ được mở trong một tab mới của trình duyệt của bạn.
  2. Bây giờ đi đến tùy chọn in. Từ đây, bạn có thể lưu tệp này ở định dạng tệp pdf.

Lưu ý rằng từ tùy chọn in, chúng tôi cũng có thể linh hoạt chọn một phần của sổ ghi chép để lưu ở định dạng pdf.


2

Tôi đã tìm cách lưu sổ ghi chép dưới dạng html, vì bất cứ khi nào tôi cố tải xuống dưới dạng html bằng bản cài đặt Jupyter mới của mình, tôi luôn gặp 500 : Internal Server Error The error was: nbconvert failed: validate() got an unexpected keyword argument 'relax_add_props'lỗi. Thật kỳ lạ, tôi thấy rằng tải xuống dưới dạng html đơn giản như:

  1. Nhấp chuột trái vào sổ ghi chép
  2. Nhấp vào 'Lưu dưới dạng ...' trong menu thả xuống
  3. Tiết kiệm cho phù hợp

Không xem trước bản in, không in, không chuyển đổi nbconvert. Sử dụng Jupyter Version: 1.0.0. Chỉ là một gợi ý để thử (rõ ràng không phải tất cả các thiết lập đều giống nhau).


2

Tôi thấy rằng phương pháp dễ nhất để chuyển đổi sổ ghi chép trên web sang pdf là trước tiên hãy xem nó trên dịch vụ web nbviewer . Sau đó, bạn có thể in nó thành tệp pdf. Nếu sổ ghi chép nằm trên ổ đĩa cục bộ của bạn, trước tiên hãy tải nó lên kho lưu trữ github và sử dụng url của nó cho nbviewer.


2

Các cách tiếp cận được đề xuất khác:

  1. Sử dụng 'In và sau đó chọn lưu dưới dạng pdf.' từ tệp HTML của bạn sẽ làm mất các cạnh viền, làm nổi bật cú pháp, cắt bớt các ô, v.v.

  2. Một số thư viện khác đã bị hỏng khi sử dụng các phiên bản lỗi thời.

Giải pháp: Một lựa chọn tốt hơn, không phức tạp là sử dụng công cụ chuyển đổi trực tuyến https://www.sejda.com/html-to-pdf sẽ chuyển đổi phiên bản * .html của * .ipynb thành * .pdf.

Các bước:

  1. Đầu tiên, từ giao diện sổ ghi chép Jupyter của bạn, hãy chuyển đổi * .ipynb thành * .html bằng cách sử dụng

Tệp> Tải xuống dưới dạng> HTML (.html)

  1. Tải tệp * .html mới được tạo lên https://www.sejda.com/html-to-pdf và sau đó chọn tùy chọn HTML sang PDF.

  2. Tệp pdf của bạn hiện đã sẵn sàng để tải xuống.

  3. Bây giờ bạn có các tệp .ipynb, .html và .pdf


2

Tôi đã kết hợp một số câu trả lời ở trên trong python nội tuyến mà bạn có thể thêm vào ~ / .bashrc hoặc ~ / .zshrc để biên dịch và chuyển đổi nhiều sổ ghi chép sang một tệp pdf duy nhất

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

Phiên bản trăn trơn của câu trả lời của partizanos .

  • mở Terminal (Linux, MacOS) hoặc đến nơi bạn có thể thực thi các tệp python trong Windows
  • Nhập mã sau vào tệp .py (giả sử tejas.py)
import os

[os.system("jupyter nbconvert --to pdf " + f) for f in os.listdir(".") if f.endswith("ipynb")]
  • Điều hướng đến thư mục chứa sổ ghi chép jupyter
  • Đảm bảo rằng tejas.py nằm trong thư mục hiện tại. Sao chép nó vào thư mục hiện tại nếu cần.
  • nhập "python tejas.py"
  • Công việc hoàn thành

Sử dụng --template reportnhư một tùy chọn bổ sung cũng biên dịch ToC thành pdf kết quả bằng cách lấy các tiêu đề đánh dấu xuống khác nhau trong sổ ghi chép.
Stefan

2

notebook-as-pdfInstall

python -m pip install 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


Cảm ơn bạn, điều này làm việc tốt cho tôi. Lần đầu tiên tôi thử điều này trong môi trường Python 3.6.8 nhưng gặp phải một số vấn đề. Sau đó, tôi đã nâng cấp lên môi trường Python 3.7.8, dựa trên Conda và nó hoạt động giống như một Charm.
mastDrinkNimbuPani

Đó là bởi vì asyncio là một phần phụ thuộc của gói và ở đâu đó trong mã có một asyncio.run là một phương thức chỉ 3.7.
mastDrinkNimbuPani

0

Cách đơn giản nhất mà tôi nghĩ là 'Ctrl + P'> lưu dưới dạng 'pdf'. Đó là nó.


Điều này sẽ hiển thị các khối mã
Dani LA

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.