IPython/Jupyter问题:无法将笔记本保存为PDF

126

所以,我一直在尝试将jupyter笔记本保存为PDF,但我无法弄清楚如何操作。我尝试的第一件事是从文件菜单中下载为PDF,但这样做会产生以下结果:

nbconvert failed: PDF creating failed

下一步我尝试的是像这样从命令提示符中进行转换。
$ ipython nbconvert --to latex --post PDF MyNotebook.ipynb 

但是,这又导致了一个错误消息。
ImportError: No module named 'PDF'

如果我尝试

$ ipython nbconvert --to latex MyNotebook.ipynb 

这会导致

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

如果我尝试安装pandoc (pip install pandoc),会出现以下提示:

ImportError: No module named 'ConfigParser'

我卡在这里了,因为我不知道还能做什么。 有人知道如何修复出现的问题吗?


2
创建 PDF 需要非 Pythonic 依赖项(即 pandoclatex)。 - cel
6
这意味着在使用此功能之前,您必须安装它们。它们不是Python包,因此您无法使用pip。 - cel
1
pandoc 是用 Haskell 编写的。 - Thomas K
21个回答

61
为了使其工作,我安装了 LaTeX、Typical LaTeX Extra 和 Pandoc。
在 Ubuntu 中:
sudo apt-get install texlive texlive-latex-extra pandoc

下载需要一段时间:几个100 MB。我在某处读到可以在texlive和extra中使用--no-install-recommends来减少下载量。


13
我需要安装pandoctexlive-xetex才能运行。 - douggard
我在ask_ubuntu上找到了一个较小的软件包列表。 - Eric Duminil
3
除了@douggard建议的texlive-xetex之外,我还需要texlive-generic-extra来解决这个问题 - pgmank
非常感谢,那真是帮了我大忙 :) - farnaz jazayeri
1
你是我的英雄! - DvdG

43
如果你使用的是Mac电脑且已经安装了Homebrew,则需要打开终端窗口,并输入以下命令来安装pandoc:

brew install pandoc

请耐心等待,因为在网络连接缓慢或旧系统上进行安装和编译可能需要一段时间。

5
这在 OS X 10.10 上可用。我现在可以转换成 LaTeX 和 PDF。 (我的 pandoc 安装不到一分钟...我可能已经在系统上有大部分组件了。) 谢谢! - drpetermolnar
2
@drpetermolnar 这对我也起作用了(OSX 10.11.6)。只花了2分钟。 - timothyjgraham
1
@Akshay,命令是:ipython nbconvert --to PDF <your notebook>.ipynb - Andrea
@AndreaNalon 上述命令无法正常工作,https://stackoverflow.com/questions/43247818/error-in-converting-ipython-notebook-file-to-pdf - Akshay Khale
1
对于OSX 10.13.06,我需要执行以下操作: “brew install pandoc”和“brew cask install mactex-no-gui”。 - bue

19

要将笔记本转换为PDF,您首先需要安装nbconvert。

pip install nbconvert
# OR
conda install nbconvert

接下来,如果您没有使用Anaconda或者还没有安装pandoc,您必须按照官网上的说明进行安装,或者在Linux上按照以下步骤进行安装:

sudo apt-get install pandoc

接下来,您需要在您的计算机上安装XeTex:

现在,您可以进入存储您的IPython笔记本的文件夹并运行以下命令:

jupyter nbconvert --to pdf MyNotebook.ipynb

如需进一步参考,请查看此链接


13

2015年4月22日:看起来IPython的更新意味着应该使用--to pdf而不是--to latex --post PDF。这与Github问题有关。


10

转换任何Jupyter笔记本为PDF,请按照以下步骤进行:

(进入 Jupyter 笔记本):

Mac OS上:

command + P --> 会出现打印对话框 --> 更改目的地为 PDF --> 点击打印

Windows上:

Ctrl + P --> 会出现打印对话框 --> 更改目的地为 PDF --> 点击打印

如果上述步骤不能生成完整的 Jupyter 笔记本 PDF (可能是因为 Chrome 不会打印所有输出,因为 Jupyter 对于大输出会滚动),

请尝试执行以下操作以删除菜单中的自动滚动

Credits: @ÂngeloPolotto

  1. 在您的 Jupyter Notebook 中,单击顶部的Cell enter image description here

  2. 接下来点击All output --> Toggle scrolling 以删除自动滚动。

enter image description here


我同意,但是Chrome有时候不会打印所有的输出,因为Jupyter对于大量输出会自动滚动。你需要在菜单Cell->All Outputs->Toggle Scrolling中取消自动滚动(参考:https://dev59.com/d1oV5IYBdhLWcg3wEbO9#52803744)。 - Ângelo Polotto
你能在你的回答中添加这些信息吗?这对更多的用户来说可能非常有帮助。 - Ângelo Polotto
1
是的 @ÂngeloPolotto,我已经在我的答案中添加了您的信息。 - MobileDev

5

我正在使用安装在Ubuntu 16.0操作系统上的Anaconda-Jupyter Notebook进行Python编程。

安装Nbconvert、Pandoc和Tex:

打开终端并执行以下命令。

安装Nbconvert:虽然它是Jupyter生态系统的一部分,但仍需再次安装

$conda install nbconvert

或者

$pip install nbconvert

如果你正在使用anaconda,我建议使用conda而不是pip。

安装Pandoc:因为Nbconvert使用Pandoc将markdown转换为除HTML以外的其他格式。输入以下命令

$sudo apt-get install pandoc

安装TeX:为了将文件转换为PDF,nbconvert使用TeX。请执行以下命令:

$sudo apt-get install texlive-xetex

执行完这些命令后,关闭打开的笔记本,刷新主页或重启已打开的笔记本的内核。现在尝试将笔记本下载为PDF文件 :)
注意:更多详细信息,请参考官方文档:
https://nbconvert.readthedocs.io/en/latest/install.html

5

正如问题的评论所说,您需要使用Pandoc和LaTeX(例如TeXShop)。我使用Homebrew安装了Pandoc,只需一秒钟即可完成安装。有了Pandoc和TeXShop,我可以生成LaTeX文件但无法在命令行上生成PDF文件。

ipython nbconvert --to latex mynotebook.ipynb

使用TeXShop浏览latex(.tex)文件时,失败是因为缺少样式表和defs。在安装了所有这些(adjustbox.sty、adjcalc.sty、trimclip.sty、collectbox.sty、tc-pgf.def、ucs.sty、uni-global.def、utf8x.def、ucsencs.def)之后,它最终确实起作用了。

然而,结果对我来说有点过于花哨了。很遗憾从Safari打印HTML会丢失语法着色。否则,看起来并不那么糟糕。(这全部是在OS X上完成的。)


1
以下这行简短的代码可以直接生成PDF文件,而无需通过编译创建任何中间文件。jupyter nbconvert --to pdf filename.ipynb - llinfeng
现在他们至少有了一个修复彩色打印的方法,这样直接将HTML打印到PDF上就不会那么糟糕了:https://github.com/jupyter/notebook/issues/840 - flutefreak7

4
这个Python脚本有一个GUI界面,可以让你用资源管理器选择要转换为PDF的Ipython Notebook。wkhtmltopdf是我找到的唯一一个工作良好并提供高质量PDF的方法。这里描述的其他方法存在问题,语法高亮不起作用或图表混乱。
你需要安装wkhtmltopdf: http://wkhtmltopdf.org/downloads.html 还需要安装Nbconvert。
pip install nbconvert
# OR
conda install nbconvert

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

这段代码有点长,不太适合在Stack Overflow回复中贴出来,它只是一个wkhtml的包装脚本。如果您只提供wkhtml的命令行选项和示例,答案会更清晰明了。 - Hugh Perkins
所以基本上,您正在使用 nbconvert 导出为 html,然后使用 wkhtmltopdf 转换为 pdf。但这并不清楚从您的回答中 :-) - Hugh Perkins
所以,我尝试了这个方法。它比直接导出为pdf效果更好。奇怪的是,我的一些MathJax在文档开头正确地渲染出来,但在文档的大约12页后停止渲染,原因不明。 - Hugh Perkins

2

笔记本转PDF安装 python -m pip install notebook-as-pdf pyppeteer-install

使用方法 您也可以将其与nbconvert一起使用:

jupyter-nbconvert --to PDFviaHTML filename.ipynb

这将创建一个名为filename.pdf的文件。

或者pip install notebook-as-pdf

从笔记本创建pdf jupyter-nbconvert-toPDFviaHTML


这个解决方案在我尝试时未能包含图像。 - Jamie Marshall

1
将 .ipynb 文件转换为 pdf,您的系统需要包含两个组件,
  1. nbconvert: Is part of jupyter allows to convert ipynb to pdf

    pip install nbconvert
    OR 
    conda install nbconvert
    
  2. XeTeX: Convert ipynb to .tex format and then converting to pdf.

    sudo apt-get install texlive-xetex
    
然后您可以使用以下命令将其转换为PDF:
ipython nbconvert --to pdf YOURNOTEBOOK.ipynb
如果无法正常运行,请安装pandoc并再试一次。
sudo apt-get install pandoc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接