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


89

我想将我的ipython-notebooks转换为打印它们,或者只是以html格式发送它们。我已经注意到nbconvert已经有一个工具可以做到这一点。尽管我已经下载了它,但是我不知道如何使用nbconvert2.py转换笔记本,因为nbconvert说它已被弃用。nbconvert2.py说我需要一个配置文件来转换笔记本,这是什么?是否存在有关此工具的文档?


Answers:


96

如果你有乳胶安装,你可以直接从笔记本Jupyter下载PDF文件与文件- >下载为- >通过胶乳(.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笔记本环境,无需进行设置即可完全在云中运行。如果您使用的是Google Colab,则命令是相同的,但是Google Colab仅允许您下载.ipynb或.py格式。

  2. 将html文件notebook.html转换为名为notebook.pdf的pdf文件。在Windows,Mac或Linux中,安装wkhtmltopdf。wkhtmltopdf是一个命令行实用程序,可使用WebKit将html转换为pdf。您可以从链接的网页下载wkhtmltopdf,或者在许多Linux发行版中都可以在其资源库中找到它。

    wkhtmltopdf notebook.html notebook.pdf   
    

原始(现在几乎已经过时)的修订版:将IPython笔记本文件转换为html。

ipython nbconvert --to html notebook.ipynb


1
一切都折叠成一页-__-
htafoya '18

2
对于HTML输出,你现在应该使用jupyter的地方ipythonjupyter nbconvert --to html notebook.ipynb
AlexG

为此,应安装jupyter_contrib_nbextensions
CharlesG

根据以上答案,您需要wkhtmltopdf。要将其安装到ubuntu 14.04中,这对我有用gist.github.com/brunogaspar/bd89079245923c04be6b0f92af431c10
Pradeep Singh

3
您也可以将网站打印为pdf。
AndiCover

17

文档

如果要为其他人提供笔记本的静态HTML或PDF视图,请使用“打印”按钮。这将打开文档的静态视图,您可以使用操作系统的功能将其打印为PDF,或者使用网络浏览器的“保存”选项将其保存为文件(请注意,通常,这会创建一个html文件和一个目录,称为它旁边的notebook_name_files包含所有必要的样式信息,因此,如果您要共享此信息,则必须将目录与主html文件一起发送)。


1
谢谢!HTML版本非常好,而且非常容易获得。但是PDF不好,如果图形在两页之间,并且将长代码行也切成两段,则会将它们切成两段。
nunzio13n 2013年

@ nunzio13n-好吧,至少您有html ...我没有使用过,nbconvrt所以在此方面我真的不能帮您。希望有人会来...

3
无效链接。另外,我的笔记本中没有打印按钮。
2013年

使用CTRL+P可以在浏览器中使用打印。
Levi Baguley

13

nbconvert2尚未完全替换为nbconvert2,您仍然可以根据需要使用它,否则我们将删除可执行文件。只是警告我们不再修正nbconvert1。

以下应该工作:

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

如果您使用的是最新版本的IPython,请不要使用打印视图,而应使用常规的打印对话框。chrome中的图蜜蜂切割是一个已知问题(Chrome浏览器不支持某些打印CSS),并且在Firefox中效果更好,但并非所有版本都适用。

至于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>

只要提取的数字在cwd中,它就应该写入您的(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档案)正在tex / pdf / sphinx导出上工作,并且在撰写本文时是从ipynb文件生成PDF的专家。


谢谢,您澄清了我的更多疑问。但是nbconvert2.py仍然不起作用,因为它甚至需要一个配置文件,[NbconvertApp] Config file for profile './profile/latex_base.nbcv' not found, giving up而nbconvert并没有直接给我一个pdf文件,而是一个乳胶文件,我必须使用pdflatex处理* .tex文件,但这是一个好的解决方案。
nunzio13n 2013年

您能否在github上打开一个问题,我们将进行解决。
Matt

可能这不是nbconvert的问题,但这是由于我缺乏相关知识。也许当文档发布时一切都会很清楚,带笔记本的ipython和nbconvert是一项非常不错的工作,我相信很快就会成为文档。
nunzio13n 2013年

这似乎丢失/不给任何ipython编号(希望它可以使用ipython指令进行转换)。
安迪·海登

是否有API版本可以实现这一目标?我看到有IPython.nbconvert.exporters.latex,我想知道是否有一种方法可以在没有命令行工具的情况下从中获取PDF输出。另外,使它起作用的依赖性是什么?(pandoc,tetex或其他东西?)而且我认为它不是跨平台的(在Windows上不起作用)。TIA!
IanSR 2014年

11

同时传递--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中测试。


9

对于那些无法在其系统中安装wkhtmltopdf的人,除了在此问题的答案中已经提到的许多方法外,还有另一种方法是简单地从jupyter笔记本中将文件下载为html文件,然后将其上传到HTML到PDF并下载。从那里转换的pdf文件。

在这里,您将IPython笔记本(.ipynb)转换为PDF(.pdf)和HTML(.html)格式。



4

如果您的文档中包含数学和科学公式,则只有此答案对您有用。即使您没有它们,它也可以正常工作。

GUI方式

  • 打开jupyter笔记本 打开jupyter笔记本
  • 转到文件>以LaTeX格式下载> HTML或PDF 转到文件>以LaTeX格式下载> HTML或PDF

  • 然后检查您的下载文件夹中的文件。PS:如果LaTeX在编译PDF时出现任何错误,它将失败。如果发生这种情况,请下载HTML文件,然后使用http://webpagetopdf.com/ 或任何其他类似的服务将HTML转换为PDF。

命令行方式

  • 打开终端
  • 导航到包含jupyter笔记本的文件夹
  • 键入“ jupyter nbconvert --to pdf your_jupyter_notebook.ipynb” PS:如果失败,请尝试Yogesh的回答

4

如果您使用的是鼠尾草云版本,则只需转到左上角,
选择“文件”→“另存为”→通过LaTeX(.pdf)下载Pdf

屏幕快照将ipynb转换为pdf

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


3

我还无法使pdf正常工作。该文档暗示我应该能够使其与乳胶一起使用,因此也许我的乳胶无法正常工作。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.

但是,HTML使用“幻灯片”的效果很好,而且很漂亮! $ ipython nbconvert --to slides myfile.ipynb ... [NbConvertApp] Writing 215220 bytes to myfile.slides.html

//更新2014-11-07Fri .: IPython v3语法有所不同,它更简单; $ ipython nbconvert --to PDF myfile.ipynb 在所有情况下,似乎我都缺少库“ pdflatex”。我正在调查。


尝试:$ ipython nbconvert your_file.ipynb --to Latex --post PDF
摩尔多瓦2014年

ty @moldovean ping我再看一遍。更多谷歌搜索发现了这个问题。参数顺序无所谓,我仍然得到“没有这样的文件或目录”。
AnneTheAgile 2014年

这是一个有趣的问题。也许...只是重新安装ipython会有所帮助。.我真的不知道:(
Moldovean 2014年

@moldovean,事实证明某些库是必需的,但不是由ipynb安装的。在这种情况下,我的路径上至少需要pdflatex。见我的PR来改进错误检查,github.com
ipython/

3

您可以先将笔记本转换成HTML,然后再转换成PDF格式:

我执行的步骤如下:操作系统:Ubuntu,Anaconda-Jupyter笔记本,Python 3

1以HTML格式保存笔记本:

  1. 启动要以HTML格式保存的jupyter笔记本。首先正确保存笔记本,以使HTML文件具有您的代码/笔记本的最新保存版本。

  2. 从笔记本计算机本身运行以下命令:

    !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:

  1. 现在打开该your_notebook_name.html文件(单击它)。它将在浏览器的新标签页中打开。
  2. 现在转到打印选项。您可以从此处以pdf文件格式保存此文件。

请注意,从打印选项中,我们还可以灵活选择笔记本的一部分以pdf格式保存。


2

我一直在寻找一种将笔记本保存为html的方法,因为每当我尝试在新的Jupyter安装中以html格式下载时,总是会出现500 : Internal Server Error The error was: nbconvert failed: validate() got an unexpected keyword argument 'relax_add_props'错误。奇怪的是,我发现以html格式下载非常简单:

  1. 在笔记本中单击鼠标左键
  2. 点击下拉菜单中的“另存为...”
  3. 相应地保存

没有打印预览,没有打印,没有nbconvert。使用Jupyter Version: 1.0.0。只是一个建议尝试(显然并非所有设置都相同)。


2

我发现将网络上的笔记本转换为pdf的最简单方法是首先在网络服务nbviewer上查看它。然后可以将其打印为pdf文件。如果笔记本在您的本地驱动器上,则首先将其上传到github存储库,并将其URL用于nbviewer。


2

建议的其他方法:

  1. 使用“打印,然后选择另存为pdf”。HTML文件中的内容会导致边框丢失,语法突出显示,图的修剪等。

  2. 当使用过时的版本时,其他一些库已显示为已损坏。

解决方案:更好,更轻松的选择是使用在线转换器https://www.sejda.com/html-to-pdf,它将* .ipynb的* .html版本转换为* .pdf。

脚步:

  1. 首先,从Jupyter笔记本界面中,使用以下命令将* .ipynb转换为* .html

文件>下载为> HTML(.html)

  1. 将新创建的* .html文件上传到https://www.sejda.com/html-to-pdf,然后选择HTML到PDF选项。

  2. 您的pdf文件现在可以下载了。

  3. 您现在拥有.ipynb,.html和.pdf文件


2

我将上面的一些答案合并在嵌入式python中,您可以将其添加到〜/ .bashrc或〜/ .zshrc中,以编译并将许多笔记本转换为单个pdf文件

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

partizanos的answer的纯Python版本。

  • 打开终端(Linux,MacOS)或指向可以在Windows中执行python文件的位置
  • 在.py文件中键入以下代码(例如tejas.py)
import os

[os.system("jupyter nbconvert --to pdf " + f) for f in os.listdir(".") if f.endswith("ipynb")]
  • 导航到包含jupyter笔记本的文件夹
  • 确保tejas.py在当前文件夹中。如有必要,将其复制到当前文件夹。
  • 输入“ python tejas.py”
  • 任务完成

--template report作为额外的选项,采取不同的降价标题在笔记本还编译通过TOC生成的PDF。
Stefan

2

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


谢谢,这对我来说很好。我首先在Python 3.6.8环境中进行了尝试,但遇到了一些问题。然后,我升级到基于Conda的Python 3.7.8环境,它像Charm一样工作。
mastDrinkNimbuPani

这是因为asyncio是程序包的依赖项,并且在代码中的某个地方有asyncio.run,这是3.7的唯一方法。
mastDrinkNimbuPani


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.