【问题标题】:IPython/Jupyter Problems saving notebook as PDFIPython/Jupyter 将笔记本保存为 PDF 时出现问题
【发布时间】:2015-05-23 06:42:18
【问题描述】:

所以,我一直在尝试将 jupyter notebook 保存为 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'

这就是我卡住的地方,因为我不知道还能做什么。 有人知道如何解决问题吗?

【问题讨论】:

  • 创建 pdf 需要非 pythonic 依赖项(即 pandoclatex
  • 这意味着您必须先安装它们才能使用此功能。而且它们不是 python 包,因此你不能使用 pip。
  • pandoc 是用 Haskell 编写的。

标签: pdf ipython jupyter


【解决方案1】:

为了让它工作,我安装了latex、典型的latex extra和pandoc。

使用 ubuntu:

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

它需要一些时间:下载几个 100 Mb。我在某处读到,您可以使用 --no-install-recommends 进行 texlive 和额外的操作以减少到 dl。

【讨论】:

  • 我需要pandoctexlive-xetex
  • 我在ask_ubuntu 上找到了一个较小的软件包列表。
  • 我还需要texlive-generic-extra 来解决this issue,除了@douggard 建议的texlive-xetex
  • 非常感谢,这是一个很大的帮助 :)
  • 你是我的英雄!
【解决方案2】:

如果您使用的是 Mac 并安装了 Homebrew,请打开终端 shell 并输入以下命令安装 pandoc:

brew install pandoc

请耐心等待,在缓慢的互联网连接或较旧的系统上,安装和编译可能需要一段时间。

【讨论】:

  • 这适用于 OS X 10.10。我现在可以转换为 LaTeX 和 PDF。 (我在 pandoc 上的安装用时不到一分钟……我的系统上肯定已经有了大部分组件。)谢谢!
  • @drpetermolnar 这也对我有用(OSX 10.11.6)。花了 2 分钟。
  • @Akshay,命令是:ipython nbconvert --to PDF .ipynb
  • @AndreaNalon 上面提到的命令不起作用,stackoverflow.com/questions/43247818/…
  • 对于 OSX 10.13.06,我必须这样做:brew install pandocbrew cask install mactex-no-gui
【解决方案3】:

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

【讨论】:

    【解决方案4】:

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

    pip install nbconvert
    # OR
    conda install nbconvert
    

    接下来,如果您没有使用或尚未使用 Anaconda,则必须按照 their website 上的说明安装 pandoc,或者在 Linux 上安装 pandoc,如下所示:

    sudo apt-get install pandoc
    

    之后,您需要在您的机器上安装 XeTex:

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

    jupyter nbconvert --to pdf MyNotebook.ipynb
    

    如需进一步参考,请查看this link

    【讨论】:

      【解决方案5】:

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

      ipython nbconvert --to latex mynotebook.ipynb
      

      使用 TeXShop 探索乳胶 (.tex) 文件,失败是由于缺少样式表和定义。在安装所有这些(adjustbox.sty、adjcalc.sty、trimclip.sty、collectbox.sty、tc-pgf.def、ucs.sty、uni-global.def、utf8x.def、ucsencs.def)之后,它终于做到了工作。

      但是,结果看起来对我来说有点太时髦了。从 Safari 打印 html 会丢失语法着色,这太糟糕了。否则,它看起来并不那么糟糕。 (这一切都在 OS X 上)。

      【讨论】:

      • 以下短行直接生成了一个PDF文件,没有留下任何编译创建的中间文件。 jupyter nbconvert --to pdf filename.ipynb
      • 至少他们现在修复了彩色打印,这样直接将 HTML 打印到 PDF 就不会那么糟糕了:github.com/jupyter/notebook/issues/840
      【解决方案6】:

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

      【讨论】:

        【解决方案7】:

        此 Python 脚本具有 GUI,可通过资源管理器选择要转换为 pdf 的 Ipython Notebook。使用 wkhtmltopdf 的方法是我发现的唯一一种效果很好并且提供高质量 pdf 的方法。此处描述的其他方法存在问题,语法高亮不起作用或图表混乱。

        您需要安装 wkhtmltopdf: http://wkhtmltopdf.org/downloads.html

        和 Nb转换

        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 页进入文档,没有明显的原因。
        【解决方案8】:

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

        在 Jupyter 笔记本中):

        Mac 操作系统上:

        command + P --> 你会得到一个打印对话框 --> 将目标更改为 PDF --> 点击打印

        Windows上:

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

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

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

        致谢:@ÂngeloPolotto

        1. 在您的 Jupyter Notebook 中,单击 jupyter notebook 顶部的 Cell

        2. 下一步点击所有输出 --> 切换滚动以移除自动滚动。

        【讨论】:

        • 我同意,但 Chrome 有时不会打印所有输出,因为 Jupyter 会滚动显示大输出。您需要删除菜单 Cell->All Outputs->Toggle Scrolling 中的自动滚动(参考:stackoverflow.com/a/52803744/6846888
        • 您可以在答案中添加此信息吗?这对更多用户来说非常有帮助。
        • 是的@ÂngeloPolotto,我已在我的回答中添加了您的信息。
        【解决方案9】:

        notebook-as-pdfInstall python -m pip install notebook-as-pdf pyppeteer-install

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

        jupyter-nbconvert --to PDFviaHTML filename.ipynb

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

        或 pip install notebook-as-pdf

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

        【讨论】:

        • 此解决方案在我执行此操作时未能包含图像。
        【解决方案10】:

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

        Mac OSX:使用 MacPorts 安装 pandoc

        port install pandoc

        这需要将近一个小时才能完成(在通常的情况下)。如果问题仍然存在,您可能必须安装 MacTeX 发行版。的 TeXLive。

        对于 Ubuntu:从 network installer 安装 vanilla TeXLive -- 不是通过 apt-get。然后使用 apt-get 安装 pandoc。

        sudo apt-get install pandoc

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

        为了省去所有这些麻烦,使用 IPython/Jupyter Notebook 的推荐方法是安装 Anaconda Python 发行版。

        【讨论】:

          【解决方案11】:

          我也遇到了各种各样的问题。我不知道它是否能提供您真正需要的东西,但我将我的笔记本下载为 HTML 文件,然后在我的 Chrome 浏览器中将其拉出,然后将其打印为 PDF 文件,我保存了该文件。它捕获了我所有的代码、文本和图表。这对我需要的东西来说已经足够好了。

          【讨论】:

          • 在我的例子中,html 每页放置一个单元格,即使它太长。所以不是解决方案
          【解决方案12】:

          如果你使用的是sagemath云版,你可以直接到左下角,
          选择文件 --> 下载为 --> Pdf via LaTeX (.pdf)
          如果需要,请查看屏幕截图。

          Screenshot Convert ipynb to pdf

          如果由于任何原因无法正常工作,您可以尝试其他方法。
          选择文件 --> 打印预览然后在预览上
          右击-->打印,然后选择另存为pdf。

          【讨论】:

          • 如果还不行,可以直接在命令行使用nbconvert,看看到底是什么原因导致了latex问题。
          【解决方案13】:

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

          正如菲利普·施瓦茨所说: "你需要安装 wkhtmltopdf: [http://wkhtmltopdf.org/downloads.html][1]

          和 Nbconvert "

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

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

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

          【讨论】:

            【解决方案14】:

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

            【讨论】:

              【解决方案15】:

              我在 Windows 10 中遇到了这个错误。我按照以下三个步骤解决了我的问题:

              1. 安装 nbconvert

                pip install nbconvert

              2. 安装 pandoc

              https://pandoc.org/installing.html

              1. 安装 miktex

              https://miktex.org/download


              更新库也很好:

              pip install jupyter --upgrade
              pip install --upgrade --user nbconvert
              

              【讨论】:

                【解决方案16】:

                我发现 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')
                

                【讨论】:

                  【解决方案17】:

                  对于 Ubuntu 用户,可以在 here 找到答案。我也引用它:

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

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

                  另外,nbconvert 是另一个通常自动生成的依赖项 与 jupyter 一起安装。但是您可以安装它只是为了确定,而 激活您的虚拟环境:

                  pip install -U nbconvert
                  

                  【讨论】:

                    【解决方案18】:

                    我在正常显示某些符号时遇到了问题,以 pdf 格式下载。所以下载为 tex jupyter nbconvert --to latex "my notebook.ipynb",用记事本做了一些调整(例如,我的语言需要这些行

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

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

                    但最后,为了保留您在浏览器中看到的相同字符,我最终使用 Chrome 浏览器打印:Ctrl+PPrint to pdf。它添加了不必要的页眉和页脚,但其他一切都保持原样。不再有处理 tqdm 进度条的错误,不再有代码跳出页面等等。就这么简单。

                    【讨论】:

                      【解决方案19】:

                      在任何系统中,正确设置 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-installation

                      安装 texlive

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

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

                      `

                      对于其他人并完全安装 texlive,请根据您的系统和选择按照tug 给出的说明进行操作。

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

                      1. 清理

                        rm -rf /usr/local/texlive/2019

                        rm -rf ~/.texlive2019

                      2. 运行安装程序

                        解压压缩包

                        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

                      命令可能因您的系统而异,但基本步骤保持不变。

                      【讨论】:

                        猜你喜欢
                        • 1970-01-01
                        • 1970-01-01
                        • 2015-05-12
                        • 1970-01-01
                        • 1970-01-01
                        • 2021-08-17
                        • 1970-01-01
                        • 2014-03-12
                        • 1970-01-01
                        相关资源
                        最近更新 更多