2012-02-21 2 views
1

Приведенный ниже код создает хорошую тестовую таблицу с 99 строками данных и заголовок, который повторяется при каждом разрыве страницы. Таблица довольно узкая, поэтому я пытаюсь выяснить, как сделать ее разбитой так, чтобы она имела строки 1-37 в левой части первой страницы, строки 38-74 в правой части первой страницы и строки 75-99 в левой части второй страницы. Я назвал это «разделение таблицы на странице», но может быть лучшее имя для того, что я пытаюсь сделать. Надеюсь, что я описал это точно.Как разбить таблицу ReportLab на страницу PDF (бок о бок)?

from reportlab.platypus import SimpleDocTemplate, Table, TableStyle, Paragraph, Frame, Spacer 
from reportlab.lib import colors 
from reportlab.lib.units import cm 
from reportlab.lib.pagesizes import A3, A4, landscape, portrait 
from reportlab.lib.styles import ParagraphStyle, getSampleStyleSheet 
from reportlab.lib.enums import TA_LEFT, TA_RIGHT, TA_CENTER, TA_JUSTIFY 
from reportlab.pdfgen import canvas 

pdfReportPages = "C:\\Temp\\test.pdf" 
doc = SimpleDocTemplate(pdfReportPages, pagesize=A4) 

# container for the "Flowable" objects 
elements = [] 
styles=getSampleStyleSheet() 
styleN = styles["Normal"] 

# Make heading for each column and start data list 
column1Heading = "COL ONE" 
column2Heading = "COL TWO" 
# Assemble data for each column using simple loop to append it into data list 
data = [[column1Heading,column2Heading]] 
for i in range(1,100): 
    data.append(["Col 1 Row " + str(i),"Col 2 Row " + str(i)]) 

tableThatSplitsOverPages = Table(data, [2.5 * cm, 2.5 * cm], repeatRows=1) 
tableThatSplitsOverPages.hAlign = 'LEFT' 
tblStyle = TableStyle([('TEXTCOLOR',(0,0),(-1,-1),colors.black), 
         ('VALIGN',(0,0),(-1,-1),'TOP'), 
         ('LINEBELOW',(0,0),(-1,-1),1,colors.black), 
         ('BOX',(0,0),(-1,-1),1,colors.black), 
         ('BOX',(0,0),(0,-1),1,colors.black)]) 
tblStyle.add('BACKGROUND',(0,0),(1,0),colors.lightblue) 
tblStyle.add('BACKGROUND',(0,1),(-1,-1),colors.white) 
tableThatSplitsOverPages.setStyle(tblStyle) 
elements.append(tableThatSplitsOverPages) 

doc.build(elements) 

ответ

2

Вам нужно будет использовать PageTemplates для достижения этой цели путем создания PageTemplate, который имеет несколько фреймов, которые позволят вам определить области контента для рисования документа в пределах страницы. К сожалению, это означает отказ от SimpleDocTemplate и вместо этого использование BaseDocTemplate и предоставление ваших собственных PageTemplates (а также других вещей, если вы хотите их).

+1

Thanks Gordon - Я надеялся остаться с SimpleDocTemplate, поэтому я переосмыслию, насколько важна эта функциональность для моего приложения, и гарантирует ли это, что я пытаюсь узнать, как изменять шаблоны страниц. Возможно, есть галерея существующих Шаблонов страниц, где можно выбирать/учиться? – PolyGeo

+0

К сожалению, я не думаю, что есть что-то, что вы можете найти на сайте ReportLab. –