从Python输出文档(最好是PDF)

时间:2016-12-22 03:58:23

标签: python pdf matplotlib automation pdf-generation

我有一个Python脚本(3.5)将通过一系列测试。用户可以选择哪些测试用完了N个可能的测试。因此,用户可以运行1次测试直至N次测试。

现在,我只是将测试结果输出到from subprocess import call import webbrowser call(["python", "-m", "SimpleHTTPServer"]) #This creates a server at port:8000 webbrowser.open_new_tab("some/url") 的情节,看起来不错,但它们只是保存为单个文件。此外,代码对每个测试都有一些PASS / FAIL标准。

所以,问题是,我想用Python的一些工具将测试序列的整个故事输出为PDF。我希望能够保留一些Boiler-Plate的东西并在中间更新一些东西....例如:

matplotlib Graph 每次都是相同的是:

Test was run for 7 minutes. Maximum power was recorded as -69.5dBm.

并且,从测试结果中提取分钟数和最大功率数。此外,图表是从'matplotlib'中提取的。

所以,对于每个测试,我想附加一些Boiler-plate文本,用实际数据填充一些空白,并在适当的时候拍一张图片,我想用Python做。

我查看了有关SO的一些建议,但在大多数情况下,解决方案似乎是为现有的现有 PDF附加或加水印。此外,Google为自动生成Python代码文档提供了大量结果...而不是使用Python生成文档的代码。

Reportlab看起来很有希望,但看起来它已被抛弃了。

另外,我并不认为输出是PDF的要求。这仅供内部使用,因此有一些灵活性。 HTML,Word或其他可以由用户手动转换为PDF的内容也可以。我知道PDF由于其二元性质而有些麻烦。

1 个答案:

答案 0 :(得分:1)

您可以直接在matplotlib中完成所有这些操作。 可以创建多个数字,然后使用matplotlib.backends.backend_pdf.PdfPages将它们全部保存到同一个pdf文档中 可以使用text()命令设置文本。

以下是有关如何运作的基本示例。

import matplotlib.pyplot as plt
from matplotlib.backends.backend_pdf import PdfPages
import numpy as np

N=10
text =  "The maximum is {}, the minimum is {}"

# create N figures
for i in range(N):
    data = np.random.rand(28)
    fig = plt.figure(i+1)
    ax= fig.add_subplot(111)
    ax.plot(np.arange(28), data)
    # add some text to the figure
    ax.text(0.1, 1.05,text.format(data.max(),data.min()), transform=ax.transAxes)

# Saving all figures to the same pdf
pp = PdfPages('multipage.pdf')
for i in range(N):
    fig = plt.figure(i+1)
    fig.savefig(pp, format='pdf')
pp.close()