2

我正在尝试使用表格形式的项目列表创建一个 pdf 文件。到目前为止,这是我的代码。

def GeneratePDF():
        def coord(x, y, unit=1):
            x, y = x * unit, (y * unit)+440-(pdf_temp2)
            return x, y
        width, height = A4
        styles = getSampleStyleSheet()
        styleN = styles["BodyText"]
        styleN.alignment = TA_LEFT
        styleBH = styles["Normal"]
        styleBH.alignment = TA_CENTER
        pdf_temp2=(len(PDF_DATA))*31
        hTaskNo = Paragraph('''<b>Task No</b>''', styleBH)
        hTaskDescription = Paragraph('''<b>Task Description</b>''', styleBH)
        hTimeTaken = Paragraph('''<b>Time Taken</b>''', styleBH)
        hName = Paragraph('''<b>Name</b>''', styleBH)
        hSignature = Paragraph('''<b>Signature</b>''', styleBH)
        hDate = Paragraph('''<b>Date</b>''', styleBH)
        hRemarks = Paragraph('''<b>Remarks</b>''', styleBH)

        data= [[hTaskNo, hTaskDescription,hTimeTaken, hName, hSignature,hDate,hRemarks]]
        for i in range(len(PDF_DATA)):
            data.append(PDF_DATA[i])
        Gx=-(len(data))    
        table = Table(data, colWidths=[1 * cm, 14 * cm, 1.2* cm,2.8* cm, 2.8 * cm,2.3*cm,3*cm])
        table.setStyle(TableStyle([
                           ('INNERGRID', (0,0), (-1,-1), 0.25, colors.black),
                           ('BOX', (0,0), (-1,-1), 0.25, colors.black),
                           ('BACKGROUND',(0,0),(-1,Gx),colors.lightgrey)
                           ]))
        c = canvas.Canvas("myfile.pdf", pagesize=landscape(A4))
        c.setFont("Helvetica",20)
        c.drawString(245,545,"My title")
        c.setFont("Helvetica",13)
        c.drawString(36,515,"My description")
        c.drawString(400,515,str(gw_value3))
        table.wrapOn(c, width, height)
        table.wrapOn(c, width, height)
        table.drawOn(c, *coord(1.1, 1, cm))
        c.save()

PDF_DATA是一个包含我所有表格信息的列表。这个列表每次都会有不同的长度。

当这个列表变得太长时,表格最终会超出纸张的长度,而实际上不会在下一页中创建新表格。

是否有任何命令我可以使用,以便如果当前页面已满,它将在下一页中创建其余的表格内容。

我知道canv.showPage()。这是我唯一可以使用的命令吗?

4

0 回答 0