<p>免责声明:我是<code>pText</code>的作者</p>
<p>您可以使用<code>pText</code>创建您描述的PDF。
让我们先创建一个空的<code>Document</code></p>
<pre><code> # create document
pdf = Document()
# add page
page = Page()
pdf.append_page(page)
</code></pre>
<p>我们将使用布局管理器来确定内容需要放在哪里。这比我们自己尝试计算PDF坐标系要容易得多</p>
<pre><code> # set layout
layout = SingleColumnLayout(page)
</code></pre>
<p>接下来是有趣的部分,实际处理数据:</p>
<pre><code> my_dict= {' ': ['A Error', 'B Error', 'C Error', 'D Error'],
'lab1': [0.34, 0.23, 0.80, 0.79],
'lab2': [0.53, 0.38, 0.96, 1.25],
'lab3': [0.40, 0.27, 0.68, 0.93]}
</code></pre>
<p>我将定义一个字典来将边界映射到颜色。您可以轻松地更改这段代码以添加更多颜色,或者更改颜色</p>
<pre><code> colors = {0: X11Color("Green"),
0.25: X11Color("Yellow"),
0.5: X11Color("Orange"),
0.75: X11Color("Red")}
</code></pre>
<p>接下来我们创建<code>Table</code></p>
<pre><code> table = Table(number_of_rows=4, number_of_columns=5)
</code></pre>
<p>现在我们可以在表上调用<code>add</code>。无论何时,内容都会添加到当前行(从顶行开始)。如果该行已满,我们将自动转到下一行</p>
<pre><code> table.add(Paragraph(" "))
</code></pre>
<p>现在,我们添加所有标题(我将其加粗):</p>
<pre><code> for h in my_dict[" "]:
table.add(Paragraph(text=h, font="Helvetica-Bold", font_size=Decimal(12)))
</code></pre>
<p>下一步是将所有数据实际添加到<code>Table</code>:</p>
<pre><code> for name, row in [(k,v) for k,v in my_dict.items() if k != " "]:
table.add(Paragraph(name))
for v in row:
c = X11Color("Green")
for b,bc in colors.items():
if v > b:
c = bc
table.add(Paragraph(str(v),
font_color=c,
justification=Justification.CENTERED))
</code></pre>
<p>我将使这个<code>Table</code>上的边界比默认情况下的边界薄一点:</p>
<pre><code> # set border
table.set_border_width_on_all_cells(Decimal(0.2))
</code></pre>
<p>我还将在<code>Page</code>的开头添加一个<code>Paragraph</code>,以提供有关该表所表示内容的上下文:</p>
<pre><code> # add to layout
layout.add(Paragraph("This table contains all measurands for 3 lab-sessions."))
</code></pre>
<p>现在我们将<code>Table</code>添加到<code>Page</code></p>
<pre><code> layout.add(table)
</code></pre>
<p>最后,我们存储PDF:</p>
<pre><code> # attempt to store PDF
with open("output.pdf", "wb") as in_file_handle:
PDF.dumps(in_file_handle, pdf)
</code></pre>
<p>最终结果如下所示(但您可以随意使用颜色、字体等)</p>
<p><a href="https://i.stack.imgur.com/nQaCZ.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/nQaCZ.png" alt="enter image description here"/></a></p>