如何直接从Jupyter创建自定义PDF?

时间:2019-03-11 22:50:07

标签: python pdf jupyter-notebook

我正在公司的一个项目中进行常规实验,作为生产和质量控制(QC)的一部分。我们使用定制工具来获取给定实验的数据,并将其存储在公司服务器上的数据库中。我们当前用于分析此数据的接口是运行一个主要基于Python代码的Jupyter Notebook,该Jupyter Notebook根据给定实验的数据使用matplotlib生成各种表和图。当前,我们严重依赖于手动创建此数据的报告,例如从Jupyter Notebook以CSV格式导出一些结果,并将其导入到Excel等。每个实验结束时的最终目标是生成一个格式正确的格式多页PDF,其中包含所有基本信息和结果。

我们确实需要一种更好,更自动化的方式来直接从Jupyter Notebook生成PDF格式的报告,因此我们可以轻松地将报告附加到其他PDF(例如批生产记录)。

我需要以简明扼要的方式报告用于实验的所有设备以及该实验的数据。我还需要总结每个实验的实验方式。理想情况下,我可以将设备ID号直接输入到Jupyter中,使用所有实验数据(图像,阵列等)创建一个数据框,并将此信息导出到PDF模板中。

想象中的PDF将有几页/部分,在连续的实验中基本上保持不变,但对于每一个新的数据集和使用的设备,其部分都必须进行更新。我还希望PDF具有商业品质,因为它具有我公司的名称和徽标,页眉和页脚。

我们对PyFPDF有所涉猎,但似乎对于我们的需求而言可能太有限了。我们已经研究了其他一些工具,但是有很多选择,而且显而易见,哪种选择最适合我们的目标并且最容易编写。有没有人有任何建议可以向我们指出正确的方向? Image of one of the pages from the desired PDF output

1 个答案:

答案 0 :(得分:1)

  

我还希望PDF具有商业品质,因为它具有我公司的名称和徽标,页眉和页脚。

我敢肯定,您可以直接使用python库做很多事情,但是,如果您真的想要高质量的输出,只需使用适当的工具,例如乳胶-尤其是您碰巧已经熟悉的话。如果没有,这并不难学习。我有时使用python生成乳胶输出,然后处理结果。当然,您也可以从python脚本调用pdflatex

但是,我建议首先为一组数据分别编写乳胶文档,因为它可以更轻松地进行调整。然后编写脚本以针对不同的数据集生成并处理该文件。

有关使用乳胶和python的更多建议,请参见https://tex.stackexchange.com/questions/885/how-can-i-use-latex-from-python

这是一个生成图形,乳胶文件然后调用pdflatex进行处理的示例。运行此命令,输出将在report.pdf

import numpy as np
import matplotlib.pyplot as plt
import subprocess

# Generate plots
x = np.arange(0,5,.1)
for i in [2,3,4] :
    plt.plot(x,x**i)
    plt.savefig('Fig{}.png'.format(i))

# Start latex document
f = open('report.tex', 'w')
f.write("""
\\documentclass[]{report}
\\nonstopmode
\\usepackage{lipsum}
\\usepackage{graphicx}
\\begin{document}
\lipsum[1-3]
""")

# Make latex figure
f.write("\\begin{figure}[h]\n")
f.write("    \centering\n")
for i in [2,3,4] :
    f.write("    \\includegraphics[width=.3\\textwidth]{{{}}}\n".format('Fig{}.png'.format(i)))

f.write("    \\caption{Polynomials of power 2,3,4}")
f.write("\end{figure}\n")

# End latex document
f.write("\\end{document}\n")
f.close()

# Compile latex document
subprocess.call('ls')
subprocess.call(['pdflatex', 'report.tex'])
相关问题