Reputation: 1974
I'm using LongTables to show tabled data, but when row height more then page height it crashes with
File "c:\edat\19_with_edm\fiods\..\fiods\reporting\pdf_utils.py", line 1497, in build_table
doc.build(story, canvasmaker=NumberedCanvas)
File "C:\Python27\lib\site-packages\reportlab\platypus\doctemplate.py", line 880, in build
self.handle_flowable(flowables)
File "C:\Python27\lib\site-packages\reportlab\platypus\doctemplate.py", line 793, in handle_flowable
raise LayoutError(ident)
LayoutError: Flowable <LongTable@0x018DB0A8 30 rows x 20 cols> with cell(0,0) containing
'Eq\nLvl\nD'(756.0 x 967.6) too large on page 2 in frame 'edat_table_frame'(756.0 x 504.0*) of template 'edat_page_template'
Upvotes: 3
Views: 3735
Reputation: 1649
The error looks like you try to format the table, which is out of the limit if the frame in a single page. I tested a code with 'Table' and 'LongTable' and it will show the data over multiple pages as long as you do not attempt to format first page and second page at the same time.
Example code:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from reportlab.platypus import SimpleDocTemplate, Table, LongTable, TableStyle, BaseDocTemplate, Frame, Paragraph, NextPageTemplate, PageTemplate
from reportlab.lib.pagesizes import letter, inch
from reportlab.lib import colors
def testPdf():
doc = BaseDocTemplate("testpdf.pdf",pagesize=letter,
rightMargin=72,leftMargin=72,
topMargin=72,bottomMargin=18, showBoundary=True)
width, height = letter
print width
print height
elements = []
datas = []
for x in range(1,50):
datas.append(
[x,x+1]
)
t=LongTable(datas)
tTableStyle=[
('INNERGRID', (0,0), (-1,-1), 0.25, colors.black),
('BOX', (0,0), (-1,-1), 0.25, colors.black),
]
t.setStyle(TableStyle(tTableStyle))
elements.append(t)
frameT = Frame(doc.leftMargin, doc.bottomMargin, doc.width, doc.height, id='normal')
doc.addPageTemplates([PageTemplate(id='OneCol',frames=frameT)])
doc.build(elements)
if __name__ == '__main__':
testPdf()
if you format the table with let's say:
tTableStyle=[
('SPAN',(0,0),(0,38), #span over the frame limit
('INNERGRID', (0,0), (-1,-1), 0.25, colors.black),
('BOX', (0,0), (-1,-1), 0.25, colors.black),
]
Then you'll encounter this error. I'd say probably the best way is to format the table manually, but I'm hoping there's a better solution.
Upvotes: 3