将ipython输出自动化为pdf

时间:2016-05-02 18:00:56

标签: python pdf jupyter jupyter-notebook

我有一个小程序,基本上可以进行各种统计计算,并打印出结果和图表。

目前,一个方便的方法来获得我的程序的一个很好的pdf输出是使用魔术命令%matplotlib内联在Jupyter IPython Notebook中运行我的代码并通过LaTex(.pdf)执行" PDF保存为pdf "

但是,问题是我每次运行程序时都必须手动完成。另外,我无法将程序作为二进制可执行程序提供给其他人,这是我的最终目标。

有没有办法以编程方式执行此操作?为了清楚起见,我想要的只是以pdf格式输出我的程序,以便在运行可执行文件时输出为pdf。 我不希望最终用户创建ipython笔记本。最终用户无权访问源代码。

enter image description here

3 个答案:

答案 0 :(得分:8)

截至目前,还没有一种编程语言API可以将笔记本转换为PDF。但是,存在名为nbconvert的命令行实用程序。它具有与Web界面格式转换器相同的功能。要转换为PDF,您可以执行jupyter nbconvert notebook.ipynb --to pdf

幸运的是,Python有一个方便的subprocess module,它允许您生成新进程,检查它们的输入和输出,并获得它们的返回代码。所以你可以这样做:

import subprocess
subprocess.call("jupyter nbconvert notebook.ipynb --to pdf")

有点hacky方式,但它会起作用。如果您使用的是Windows,则可能需要将额外的kwarg shell=True添加到subprocess.call()

答案 1 :(得分:3)

如果你有一个IPython笔记本,你可以制作一个首先执行的小python或bash脚本,然后生成PDF。对我来说,这个bash脚本有效:

jupyter nbconvert --ExecutePreprocessor.timeout=500 --to notebook --execute my_file.ipynb
jupyter nbconvert --to pdf my_file.nbconvert.ipynb
rm my_file.nbconvert.ipynb

如果您想使用模板自定义输出,我发现首先将文件转换为markdown然后使用pandoc创建PDF可以避免一些问题:

jupyter nbconvert --ExecutePreprocessor.timeout=500 --to notebook --execute my_file.ipynb
jupyter nbconvert  --to markdown my_file.nbconvert.ipynb  --template="mytemplate.tpl"
pandoc --toc --template=mytemplate.tex markdown my_file.nbconvert.ipynb --latex-engine=pdflatex -o final file.pdf

答案 2 :(得分:0)

在Windows上,如果要递归转换 ,则可以使用git-bash窗口并执行以下操作:

$ find /d/we_are_on_disk_d/path_to_ipynb_files/ -name '*.ipynb' | xargs jupyter nbconvert --to [script|pdf]