reportlab动态数据驱动头输出错误的字幕

时间:2016-07-10 14:50:55

标签: python dynamic header reportlab data-driven

我使用Pandas创建了一些虚构的,虽然具有代表性的临床试验类型数据,现在在ReportLab中进行了一些测试报告。

数据有一个区块(约50行),其中治疗栏为'安慰剂',治疗栏为'活跃'。我只想使用第一组的“治疗组:安慰剂”子标题列出数据,第二组使用“治疗组:活动”。

在类似主题上有一些命中,实际上我使用了一种建议的技术,即使用来自partial的{​​{1}}来扩展标题函数的参数。

functools

然后调用如下。 title1 = "ACME Corp CONFIDENTIAL" title2 = "XYZ123 / Anti-Hypertensive Draft" title3 = "Protocol XYZ123" title4 = "Study XYZ123" title5 = "Listing of Demographic Data by Treatment Arm" title6 = "All subjects" def title(canvas, doc, bytext): canvas.saveState() canvas.setFont(styleN.fontName, styleN.fontSize) canvas.drawString(DOCMARGIN, PAGE_HEIGHT*.975, title1) canvas.drawString(DOCMARGIN, PAGE_HEIGHT*.950, title2) canvas.drawString(DOCMARGIN, PAGE_HEIGHT*.925, title3) canvas.drawCentredString(PAGE_WIDTH/2.0, PAGE_HEIGHT*.900, title4) canvas.drawCentredString(PAGE_WIDTH/2.0, PAGE_HEIGHT*.875, title5) canvas.drawCentredString(PAGE_WIDTH/2.0, PAGE_HEIGHT*.850, title6) canvas.drawString(DOCMARGIN, PAGE_HEIGHT*.825, "Treatment Group:" + bytext) canvas.restoreState() 的摘要查询值为2,0表示“Placebo”,1表示活动。

n_groups

该报告共6页。安慰剂数据的前3页是正确的,第5页和第5页。 6个有效数据是正确的,但第4页 - 应该是第二个'有效'组的第一页有副标题'治疗组:安慰剂'。

我已多次重新组织语句的顺序,但无法正确地获得子标题。任何帮助,建议或魔法都将不胜感激。

[编辑1:示例数据结构] 数据的“顶部”以:

开头
def build_pdf(doc): 
    ptemplates = []
    for armcd in range(n_groups):
        ptemplates.append(PageTemplate(id = 'PT' + str(armcd), frames = [dataFrame,],
                     onPage = partial(title, bytext=t_dict[armcd]),
                     onPageEnd = foot))
    doc.addPageTemplates(ptemplates)

    elements = []
    for armcd in range(n_groups):
        elements.append(NextPageTemplate('PT' + str(armcd)))  
        sublist = [t for t in lista if t[0] == (armcd+1)]
        sublist.insert(0,colheads)
        data_table = Table(sublist, 6*[40*mm], len(sublist)*[DATA_CELL_HEIGHT], repeatRows=1)
        data_table.setStyle(styleC)
        elements.append(data_table)
        elements.append(PageBreak())
    doc.build(elements)

等50行,然后继续

[
   [1, 'Placebo', '000001-000015', '1976-09-20', 33, 'F', 'Black'],
   [1, 'Placebo', '000001-000030', '1959-04-26', 50, 'M', 'Asian'],
   [1, 'Placebo', '000001-000031', '1946-02-07', 64, 'F', 'Asian'],
   [1, 'Placebo', '000001-000046', '1947-11-08', 62, 'M', 'Asian'],

另一个50岁。

插入的列标题是:

   [2, 'Active', '000001-000002', '1962-02-28', 48, 'F', 'Black'],
   [2, 'Active', '000001-000008', '1975-10-20', 34, 'M', 'Black'],
   [2, 'Active', '000001-000013', '1959-01-19', 51, 'M', 'White'],
   [2, 'Active', '000001-000022', '1962-01-12', 48, 'F', 'Black'],
   [2, 'Active', '000001-000036', '1976-10-17', 33, 'F', 'Asian'],
   [2, 'Active', '000001-000045', '1980-12-31', 29, 'F', 'White'],

[编辑2:解决方案 - 移动['Treatment Arm Code', 'Treatment Arm', 'Site ID - Subject ID', 'Date of Birth', 'Age (Years)', 'Gender', 'Ethnicity'], 并使其成为条件:]

PageBreak()

0 个答案:

没有答案