2012-10-12 11 views
5

Mam następujący kod w Pythona do generowania dwóch tabel przy użyciu ReportLab. Czy istnieje sposób na umieszczenie tych dwóch tabel obok siebie za pomocą ReportLab?Wiele tabel (5) jedna strona przy użyciu ReportLab

from reportlab.lib import colors 
from reportlab.lib.pagesizes import letter, inch 
from reportlab.platypus import SimpleDocTemplate, Table, TableStyle 

doc = SimpleDocTemplate("simple_table_grid.pdf", pagesize=letter) 
elements = [] 

data= [['00', '01', '02', '03', '04','10', '11', '12', '13', '14'], 
    ['10', '11', '12', '13', '14', '10', '11', '12', '13', '14'], 
    ['20', '21', '22', '23', '24', '10', '11', '12', '13', '14'], 
    ['30', '31', '32', '33', '34', '10', '11', '12', '13', '14']] 

t=Table(data,5*[0.3*inch], 4*[0.2*inch]) 
t.setStyle(TableStyle([ 
     ('BACKGROUND',(0,0),(4,0),colors.gray), 
        ('INNERGRID', (0,0), (-1,-1), 0.25, colors.black), 
        ('BOX', (0,0), (-1,-1), 0.25, colors.black), 
        ])) 

elements.append(t) 

data= [['100', '01', '02', '03', '04'], 
    ['10', '11', '12', '13', '14'], 
    ['20', '21', '22', '23', '24'], 
    ['30', '31', '32', '33', '34']] 

t=Table(data,5*[0.3*inch], 4*[0.2*inch]) 
t.setStyle(TableStyle([ 
     ('BACKGROUND',(0,0),(4,0),colors.gray), 
        ('INNERGRID', (0,0), (-1,-1), 0.25, colors.black), 
        ('BOX', (0,0), (-1,-1), 0.25, colors.black), 
        ])) 

elements.append(t) 

doc.build(elements) 
+2

Czy próbowałeś użyć Fr Ames? Możesz umieścić 2 ramki obok siebie i dostosować szerokość stołu, aby wypełnić każdą ramkę (tak, aby zmusić reportlab do narysowania następnej), lub ręcznie dołączyć FrameBreak, aby przejść do następnej. Byłbym w stanie wypracować przykład później wieczorem, jeśli nikt inny jeszcze nie odpowie. – Nitzle

Odpowiedz

4

Utwórz trzecią tabelę, która będzie służyć jako powłoka dla dwóch utworzonych tabel. Ta tabela będzie miała dwie kolumny i jeden wiersz. Każda kolumna będzie miała rozmiar odpowiedniej tabeli podrzędnej.

przykład:

utworzyć dwie tabele, w innej tabeli zmiennych (np tabela1, Tabela 2)

t1_w = <your first table width size> 
t2_w = <your second table width size> 
data = [[table1, table2]] 
shell_table = Table(data, colWidths=[t1_w, t2_w]) 
2

przykład:
* cały kod

from reportlab.lib import colors 
from reportlab.lib.pagesizes import letter, inch 
from reportlab.platypus import SimpleDocTemplate, Table, TableStyle 

doc = SimpleDocTemplate("simple_table_grid.pdf", pagesize=letter) 
elements = [] 

data1 = [['00', '01', '02', '03', '04', '10', '11', '12', '13', '14'], 
     ['10', '11', '12', '13', '14', '10', '11', '12', '13', '14'], 
     ['20', '21', '22', '23', '24', '10', '11', '12', '13', '14'], 
     ['30', '31', '32', '33', '34', '10', '11', '12', '13', '14']] 

t1 = Table(data1, 5 * [0.3 * inch], 4 * [0.2 * inch]) 
t1.setStyle(TableStyle([ 
    ('BACKGROUND', (0, 0), (4, 0), colors.gray), 
    ('INNERGRID', (0, 0), (-1, -1), 0.25, colors.black), 
    ('BOX', (0, 0), (-1, -1), 0.25, colors.black), 
])) 


data2 = [['100', '01', '02', '03', '04'], 
     ['10', '11', '12', '13', '14'], 
     ['20', '21', '22', '23', '24'], 
     ['30', '31', '32', '33', '34']] 

t2 = Table(data2, 5 * [0.4 * inch], 4 * [0.2 * inch]) 
t2.setStyle(TableStyle([ 
    ('BACKGROUND', (0, 0), (4, 0), colors.gray), 
    ('INNERGRID', (0, 0), (-1, -1), 0.25, colors.black), 
    ('BOX', (0, 0), (-1, -1), 0.25, colors.black), 
])) 

data = [[t1, t2]] 
# adjust the length of tables 
t1_w = 3 * inch 
t2_w = 3 * inch 
shell_table = Table(data, colWidths=[t1_w, t2_w]) 
elements.append(shell_table) 
doc.build(elements) 
+0

działa świetnie, ale nie może uzyskać obrazu i akapitu na tej samej linii – radtek

Powiązane problemy