0

目前我正在使用 Python reportlab 制作报告。以前我使用 PdfPages,但由于缺乏自定义,我认为最好迁移到 reportlab。

这里的问题以前在 PdfPages 中,我可以轻松转换大量分类图。假设我有 100 个图表并在 PdfPages 中使用我以前的代码

def grouper(iterable, n, fillvalue=None):
    "Collect data into fixed-length chunks or blocks"
    # grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx"
    from itertools import zip_longest
    args = [iter(iterable)] * n
    return zip_longest(*args, fillvalue=fillvalue)

with PdfPages('Compile2.pdf') as pdf:
#For the rest of ET plots
    N_plots_per_page = 12
    for cols in grouper(plotcorrall['subject'].unique(), N_plots_per_page):
        plotall = sns.lmplot(x="val_mean", y="score", col="subject", data=mydf,col_wrap=4, sharex=False, sharey=False,col_order=cols)
        plt.tight_layout()
        pdf.savefig()


    pdf.close()

并在每页中接收 12 个图的输出,总共有 9 页 在此处输入图像描述

我想以此为参考在reportlab中重新创建相同的东西

styles=getSampleStyleSheet()
doc = SimpleDocTemplate("form_letter.pdf",pagesize=letter,
                        rightMargin=inch/2,leftMargin=inch/2,
                        topMargin=30,bottomMargin=18)

Story = []

N_plots_per_page = 12


for cols in grouper(plotcorrall['param_name'].unique(), N_plots_per_page):
    plotall = sns.lmplot(x="val_mean", y="score", col="subject", data=mydf,col_wrap=4, sharex=False, sharey=False,col_order=cols)
    plt.tight_layout()
    
    imgdata = BytesIO
    plt.savefig(imgdata, format='png', dpi=300)
    imgdata.seek(0)  # rewind the data

    im = Image(imgdata,8*inch, 9*inch)
    Story.append(im)

doc.build(Story)

但是代码不起作用,因为报告中只返回了 9 个最后一个图表的 1 页报告。我怎样才能正确地做到这一点?谢谢

4

0 回答 0