如何将IPython笔记本转换为PDF和HTML?

131

我想将我的ipython笔记本转换成打印格式,或者简单地以html格式发送。我注意到已经存在一个工具来完成这个任务,nbconvert。虽然我已经下载了它,但我不知道如何使用nbconvert2.py进行笔记本转换,因为nbconvert说它已经过时了。nbconvert2.py说我需要一个配置文件来转换笔记本,这是什么?是否有关于这个工具的文档?


1
如何在Jupyter Lab的“导出笔记本为…”菜单中获得“将笔记本导出为Html_toc”选项?这可能也会引起人们的兴趣。 - Trenton McKinney
3
411千次浏览,但对于像页面分页这样简单的事情仍然没有合适的解决方案——9年过去了,仍然是一场噩梦! - Wolfgang Fahl
21个回答

149
如果你已经安装了LaTeX,你可以直接从Jupyter笔记本中通过 文件(File) -> 另存为(Download as) -> PDF via LaTeX (.pdf) 来下载PDF文件。否则,请按照以下两个步骤进行操作:
  1. 对于HTML输出,您现在应该使用Jupyter代替IPython,并选择 文件(File) -> 另存为(Download as) -> HTML (.html) 或运行以下命令:

     jupyter nbconvert --to html notebook.ipynb  
    

    这将转换Jupyter文档文件notebook.ipynb为html输出格式。

    Google Colaboratory是Google提供的免费Jupyter notebook环境,无需设置即可完全在云端运行。如果您使用Google Colab,则命令相同,但Google Colab只允许下载.ipynb或.py格式。

    将html文件notebook.html转换为名为notebook.pdf的pdf文件。在Windows、macOS(brew install wkhtmltodf)或Linux中安装wkhtmltopdf。wkhtmltopdf是一种使用WebKit将html转换为pdf的命令行实用程序。您可以从链接的网页下载wkhtmltopdf,或在许多Linux发行版中可以在它们的存储库中找到。

     wkhtmltopdf notebook.html notebook.pdf   
    

原始(现在已经过时)版本:将IPython笔记本文件转换为HTML。

ipython nbconvert --to html notebook.ipynb


3
所有的内容都被压缩到一页上了 -__- - htafoya
3
对于HTML输出,您现在应该使用jupyter代替ipython,例如:jupyter nbconvert --to html notebook.ipynb - Alex
1
为了使其正常工作,应安装 jupyter_contrib_nbextensions - CharlesG
4
您还可以将该网站打印成PDF文档。 - AndiCover
我在使用这个解决方案时遇到了PDF透明度的问题(背景看起来是黑色的)。最终,我通过将.ipynb -> .tex -> .pdf进行转换来解决了这个问题。 - Matthew D. Scholefield
显示剩余4条评论

33

还需添加--execute标志以生成输出单元格。

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

最佳做法是将输出内容保留在笔记本之外以进行版本控制,参见:如何在版本控制下使用IPython笔记本

但是如果您不传递--execute,则输出将不存在于HTML中,请参见:如何从终端运行.ipynb Jupyter Notebook?

对于没有标题的HTML片段:如何将IPython笔记本导出为HTML以发布在博客上?

在Jupyter 4.4.0中测试通过。


nbconvert 有指定要使用的内核的选项吗? - Hamman Samuel
1
@HammanSamuel 我从未接触过那个,如果你发现了,请告诉我/提一个单独的问题并在这里链接它。 - Ciro Santilli OurBigBook.com
RuntimeWarning: 协程 'ZMQSocketChannel.get_msg' 从未被等待 - Wolfgang Fahl

21

来自文档

如果您想向其他人提供笔记本的静态HTML或PDF视图,请使用“打印”按钮。这将打开一个文档的静态视图,您可以使用操作系统的设施将其打印到PDF中,或使用Web浏览器的“保存”选项将其保存到文件中(请注意,通常,这将创建一个html文件和一个名为notebook_name_files的目录,其中包含所有必要的样式信息,因此,如果您希望共享此内容,则必须一起发送该目录和主要的html文件)。


1
谢谢!HTML版本非常不错,而且获取起来也很简单。然而PDF的质量并不好,如果图表在两页之间,它们会被分成两半,而长代码行也会被切断。 - nunzio13n
@nunzio13n -- 好在你至少有 HTML... 我没有使用过 nbconvrt,所以我无法真正帮助你。希望有使用过的人会出现... - root
在浏览器中使用 CTRL+P 可以通过打印来输出。 - Levi Baguley
a) 从Jupyter导出为HTML似乎无法保存图片。 b) 从Firefox中的“文件”->“另存为”表单可以获得一个完全不可交互的页面,只显示可见内容。此外,您帖子中的链接现在已失效。 - jrh

15
"nbconvert尚未被nbconvert2完全取代,如果您愿意,仍然可以使用它,否则我们会删除可执行文件。这只是一个警告,我们不再修复nbconvert1的错误。

以下操作应该有效:

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

如果您使用的是足够新的IPython版本,请不要使用打印预览,只需使用普通的打印对话框。在Chrome中裁剪图形是已知问题(Chrome不遵守某些打印CSS),在火狐浏览器中效果更好,但并非所有版本都适用。

至于nbconvert2,它仍然处于高度开发状态,需要编写文档。

Nbviewer使用nbconvert2,因此在HTML方面相当不错。

当前可用配置文件列表:

$ 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

给您现有的配置文件。 (您可以创建自己的配置文件,参见未来文档,./nbconvert2.py --help-all应该会给您一些可以在您的配置文件中使用的选项。)
然后
$ ./nbconvert2.py [profilename] --no-stdout --write=True <yourfile.ipynb>

“它应该将您的(tex)文件与当前工作目录中提取的图像一起写入。是的,我知道这不是很明显,而且它可能会改变,因此没有文档...”
“这样做的原因是nbconvert2主要是一个Python,在伪代码中,您可以执行以下操作:”
 MyConverter = NBConverter(config=config)
 ipynb = read(ipynb_file)
 converted_files = MyConverter.convert(ipynb)
 for file in converted_files :
     write(file)

“入口点将在 API 稳定后提供。我只想指出,@jdfreder (github profile) 正在开发 tex/pdf/sphinx 导出功能,并且是目前能够从 ipynb 文件生成 PDF 的专家。”

谢谢,你解答了我更多的疑惑。但是nbconvert2.py仍然无法工作,因为它需要一个配置文件[NbconvertApp] Config file for profile './profile/latex_base.nbcv' not found, giving up。而且nbconvert不能直接给我一个pdf文件,而是一个latex文件,我必须使用pdflatex处理*.tex文件,但这是一个好的解决方案。 - nunzio13n
可能这不是nbconvert的问题,而是由于我对其了解不够。也许当文档出来后一切都会变得清晰明了。IPython与Notebook和nbconvert非常棒,我相信很快就会有文档发布。 - nunzio13n
这似乎失去了/没有给出任何IPython编号(希望它能使用IPython指令进行转换)。 - Andy Hayden
有没有API版本可以实现这个功能?我看到有IPython.nbconvert.exporters.latex,我想知道是否有一种方法可以从中获取PDF输出,而不需要使用命令行工具。另外,要使其正常工作,需要哪些依赖项?(pandoc、tetex、其他东西?)我假设它不是跨平台的(无法在Windows上运行)。TIA! - IanSR

14
  1. 保存为HTML
  2. Ctrl + P
  3. 保存为PDF

2
建议展开所有输出单元格,这样PDF文件会更清晰。 - mukundha reddy

10

如果您的文档中有数学、科学公式,那么只有这个答案对您有用。即使没有公式,也可以正常工作。

图形用户界面(GUI)方式

  • 打开 Jupyter Notebook open the jupyter notebook

  • 进入 文件(File) > 下载为(Download as) > HTML或PDF通过 LaTeX Go to Files > Download as > HTML or PDF via LaTeX

  • 然后在下载文件夹中查找文件。 提示:如果 LaTeX 编译 PDF 时出现任何错误,将会失败。如果发生这种情况,请下载 HTML 文件,然后使用 Web 页面转 PDF 工具或任何类似的服务将 HTML 转换为 PDF。

命令行方式

  • 打开终端
  • 导航到包含 Jupyter Notebook 的文件夹
  • 输入“jupyter nbconvert --to pdf your_jupyter_notebook.ipynb”

提示:如果失败,请尝试Yogesh的答案


7
如果您正在使用sagemath云版本,您可以简单地转到左上角,
选择 文件→ 通过LaTeX下载PDF(.pdf)
如果您想查看截图,请检查。

Screenshot Convert ipynb to pdf

如果由于任何原因它不起作用,您可以尝试另一种方法。
选择 文件→ 打印预览,然后在预览中
右键单击 → 打印,然后选择保存为pdf。


6
您可以通过先将笔记本转换为HTML,然后再转换为PDF格式来完成此操作:
以下是我在Ubuntu、Anaconda-Jupyter笔记本和Python 3上实施的步骤:
1. 将笔记本以HTML格式保存:
- 启动要保存为HTML格式的Jupyter Notebook。首先正确保存笔记本,以便HTML文件具有最新保存的代码/笔记本版本。 - 从笔记本本身运行以下命令: `!jupyter nbconvert --to html your_notebook_name.ipynb` 执行后会创建一个HTML版本的笔记本,并将其保存在当前工作目录中。您将看到一个html文件将添加到当前目录中,文件名为 `your_notebook_name.html`(`your_notebook_name.ipynb` --> `your_notebook_name.html`)。
2. 将HTML保存为PDF:
- 现在打开 `your_notebook_name.html` 文件(单击它)。它将在浏览器的新选项卡中打开。 - 然后进入打印选项。从这里,您可以将此文件保存为pdf文件格式。
请注意,从打印选项中,我们还可以选择保存为pdf格式的笔记本的部分内容。

谢谢你的回答。我该如何指定一个文件路径来写入,而不是当前工作目录? - mouwsy
在这里找到了它:https://dev59.com/EJ7ha4cB1Zd3GeqPhEkG#43475653 - mouwsy

5

简单直接的方法只需:

1-当您在Jupyter笔记本中时,单击Ctrl + P

2-另存为PDF enter image description here


1
对我来说,这绝对是最好的答案。花了很长时间尝试让nbconvert工作,但仍然没有成功。 - daticon

4
对于那些无法在系统上安装wkhtmltopdf的人来说,除了已经在回答中提到的许多方法之外,还有一种方法是从jupyter笔记本中将文件下载为HTML文件,上传到HTML to PDF,然后从那里下载转换后的pdf文件。
在这里,您可以将IPython笔记本(.ipynb)转换为PDF(.pdf)和HTML(.html)格式。

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