IPython / Jupyter将笔记本另存为PDF时出现问题


86

因此,我一直在尝试将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需要非Python依赖项(即pandoclatex
cel

4
这意味着您必须先安装它们,然后才能使用此功能。而且它们不是python软件包,因此您不能使用pip。
cel 2015年

1
pandoc是用Haskell编写的。
Thomas K

Answers:


33

为了使其工作,我安装了乳胶,典型的乳胶Extra和pandoc。

使用ubuntu:

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

这需要一些时间:要下载几百Mb。我在某处阅读了可以--no-install-recommends用于texlive的内容,并将其减少到dl。


8
我的需要pandoctexlive-xetex
douggard'2

我在ask_ubuntu上找到了较小的软件包列表。
埃里克·杜米尼尔

1
除了建议@douggard之外,我还需要texlive-generic-extra解决此问题texlive-xetex
pgmank

非常感谢,这是非常
有用的

30

如果您使用的是Mac,并且已安装Homebrew,请打开终端外壳并输入以下命令安装pandoc

brew install pandoc

请耐心等待,如果互联网连接速度较慢或系统较旧,则安装和编译所需的时间可能会花费一些时间。


3
这适用于OS X 10.10。我现在可以转换为LaTeX和PDF。(我在pandoc上的安装花费了不到一分钟的时间。。。我的系统上必须已经安装了大多数组件。)谢谢!
drpetermolnar 2015年

1
@drpetermolnar这也对我有用(OSX 10.11.6)。花了2分钟。
timothyjgraham

1
@Akshay,命令是:ipython nbconvert --to PDF <您的笔记本> .ipynb
Andrea

@AndreaNalon上面提到的命令不起作用,stackoverflow.com
questions/43247818/…

对于OSX 10.13.06,我必须做:brew install pandocbrew cask install mactex-no-gui
布埃

12

2015-4-22:看来IPython更新意味着--to pdf应该使用而不是--to latex --post PDF。有一个相关的Github问题


10

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

pip install nbconvert
# OR
conda install nbconvert

接下来,如果您尚未使用Anaconda或尚未使用Anaconda,则必须按照pandoc网站上的说明或在Linux上按照以下说明安装pandoc :

sudo apt-get install pandoc

之后,您需要在计算机上安装XeTex:

现在,您可以导航到保存IPython Notebook的文件夹,然后运行以下命令:

jupyter nbconvert --to pdf MyNotebook.ipynb

有关更多参考,请查看此链接


4

正如对问题的评论所说,您将需要pandoc和乳胶(例如TeXShop)。我在Homebrew上安装了pandoc,只花了一秒钟。有了pandoc和TeXShop,我可以生成乳胶,但不能生成pdf(在命令行上)。

ipython nbconvert --to latex mynotebook.ipynb

使用TeXShop浏览乳胶(.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的情况变得不太糟:github.com/jupyter/notebook/issues/840
flutefreak7 '18

3

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

脚本真的很需要stackoverflow回复,并且只包装wkhtml。我想,如果仅将wkhtml的命令行选项放在一个示例中,答案就会更加清楚。
休·帕金斯

所以基本上,您nbconvert用来导出为html,然后wkhtmltopdf用来转换为pdf。但这从您的答案中还不清楚:-)
休·珀金斯

所以,我尝试了这个。它比直接导出为pdf更好。奇怪的是,我的某些mathjax可以正确呈现(在文档的开头),然后在没有明显原因的情况下停止呈现到文档中约12页。
休·帕金斯

3

我在OS: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


2

要将任何Jupyter笔记本转换为PDF,请按照以下说明进行操作:

在Jupyter笔记本中):

Mac OS上

命令+ P->您将得到一个打印对话框->将目标更改为PDF->单击打印

Windows上

Ctrl + P->您将得到一个打印对话框->将目标更改为PDF->单击打印

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

尝试执行以下步骤来删除菜单中的自动滚动:-

鸣谢:@ÂngeloPolotto

  1. 在Jupyter笔记本中,单击jupyter笔记本顶部的 单元格在此处输入图片说明

  2. 接下来单击所有输出->切换滚动以删除自动滚动。

在此处输入图片说明


我同意,但是Chrome有时不会打印所有输出,因为Jupyter会滚动显示较大的输出。您需要在菜单Cell-> All Outputs-> Toggle Scrolling中删除自动滚动(参考:stackoverflow.com/a/52803744/6846888
ngelo Polotto

您可以在答案中添加此信息吗?这对于更多用户可能非常有帮助。
ngelo Polotto

1
是的@ÂngeloPolotto,我已经在您的回答中添加了您的信息。
Akshay Ramesh

1

Ubuntu和Mac OSX都遇到此问题。经过一番疯狂的搜索和试验后,两个问题都解决了。这需要texpandoc;这两个巨型外部程序都无法通过Python的安装pip

Mac OSX:使用MacPorts安装pandoc

port install pandoc

通常情况下)该过程大约需要一个小时。如果问题仍然存在,则可能必须安装MacTeX发行版。TeXLive。

对于Ubuntu的:从安装的texlive香草网络安装-不通过apt-get的。然后使用apt-get安装pandoc。

sudo apt-get install pandoc

完整安装TeXLive将需要最多4.4 GB的磁盘空间。

为了避免所有这些麻烦,建议使用IPython / Jupyter Notebook的方法是安装Anaconda Python发行版。


1

我也遇到各种各样的问题来解决这个问题。我不知道它是否能完全满足您的需求,但是我将笔记本作为HTML文件下载,然后将其放在Chrome浏览器中,然后将其打印为PDF文件,并保存了下来。它捕获了我所有的代码,文本和图形。足以满足我的需求。


1
就我而言,即使每页html太长,html也会放置一个单元格。所以不是解决方案
Juh_

1

如果您使用的是鼠尾草云版本,则只需转到左上角,
选择“文件->下载为->通过LaTeX(.pdf)的Pdf”即可
查看屏幕截图。

截图将ipynb转换为pdf

如果由于某种原因它不起作用,则可以尝试另一种方法。
选择文件->打印预览,然后在预览上
右键单击->打印,然后选择另存为pdf。


并且,如果这行不通,您可以直接在命令行上使用nbconvert并确切查看是什么导致了乳胶问题。
威廉·斯坦

1

作为一个崭新的成员,我无法简单地在帖子中添加评论,但我想说一下Phillip Schwartz提供的解决方案对我有用。希望处于类似情况的人们会在重点关注下尽快尝试这条道路。长时间没有分页符是一个令人沮丧的问题,因此,我感谢上面的讨论。

正如Phillip Schwartz所说:“您需要安装wkhtmltopdf:[ http://wkhtmltopdf.org/downloads.html] [1 ]

和Nbconvert“

然后,添加“ rawNBConvert”类型的单元格,并包括:

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

这似乎对我有用,并且生成的PDF在相应位置具有分页符。不过,您无需运行自定义代码,因为安装这些实用程序后,将笔记本作为HTML下载,在浏览器中打开以及打印为PDF的“正常”路径似乎可以正常工作。


1

Notebook-as-pdf安装python -m pip install Notebook-as-pdf pyppeteer-install

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

jupyter-nbconvert-通过HTML filename.ipynb转换为PDF

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

或pip安装notebook-as-pdf

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


0

我发现nbconvert / utils / pandoc.py有一个代码错误,导致我的机器出错。该代码检查pandoc是否在您的环境变量路径中。对于我的机器,答案是否定的。但是pandoc.exe是!

解决方案是在第69行的代码中添加“ .exe”

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

未安装“ xelatex”的情况与此相同。在第94行中将其添加到文件nbconvert / exporters / pdf.py

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

0

要将.ipynb转换为pdf,您的系统应包含2个组件,

  1. nbconvert:是jupyter的一部分,允许将ipynb转换为pdf

    pip install nbconvert
    OR 
    conda install nbconvert
    
  2. XeTeX: 将ipynb转换为.tex格式,然后转换为pdf。

    sudo apt-get install texlive-xetex
    

然后您可以使用以下命令将其转换为pdf,

ipython nbconvert --to pdf YOURNOTEBOOK.ipynb

如果它不起作用,请安装pandoc并重试。

sudo apt-get install pandoc

0

对于Ubuntu用户,可以在此处找到答案。我还引用了它:

最可能的原因是您尚未安装适当的依赖项。您的Ubuntu系统必须安装一些有关LaTeX和XeTeX文件转换的软件包,以便将笔记本保存为PDF。您可以通过以下方式安装它们:

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

此外,nbconvert还有另一个依赖关系,通常会与jupyter一起自动安装。但是您可以确保在激活虚拟环境的同时安装它:

pip install -U nbconvert

0

我无法正确显示一些符号,并且定期将其下载为pdf。因此以tex的形式下载jupyter nbconvert --to latex "my notebook.ipynb",并使用记事本进行了一些调整(例如,在我的情况下,我需要这些行作为我的语言

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

),然后使用导出为pdf latex --output-format=pdf "my notebook.tex"

但是最后,为了保留与浏览器中相同的字符,我最终使用了Chrome浏览器打印:Ctrl+P Print to pdf。它添加了不必要的页眉和页脚,但其他所有内容均保持原样。处理tqdm进度栏时不再有错误,没有更多的代码从页面中消失等等。就那么简单。


0

在任何系统中,正确设置nbconvert以便将ipython笔记本转换为pdf / latex的基本步骤是

  1. 安装nbconvert
  2. 安装pandoc
  3. 安装Texlive

安装nbconvert

pip install nbconvert

要么 conda install nbconvert

安装pandoc

sudo apt-get install pandoc 对于Ubuntu

sudo yum install pandoc对于CentOS

对于其他人,请访问pandoc安装

安装texlive

您可以安装推荐的软件包或完全安装。对于Ubuntu

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

`

对于其他用户,要完全安装texlive,请按照您的系统和选择,按照拖船上的说明进行操作 。

我从tug-texlive-download下载了tar.gz文件, 并按照TeX Live-Quick install中给出的说明进行操作 。摘要安装说明:

  1. 清理

    rm -rf /usr/local/texlive/2019

    rm -rf ~/.texlive2019

  2. 运行安装程序

    解压缩zip文件

    cd /your/unpacked/directory

    perl install-tl

    输入命令:i

  3. 设定路径

    sudo vi /etc/bash.bashrc 并插入

    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. 设置默认纸张尺寸

    tlmgr paper letter

每个系统的命令可能不同,但基本步骤保持不变。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.