2012-10-12 231 views
5

Tengo el siguiente código en python para generar dos tablas usando ReportLab. ¿Hay alguna manera de posicionar estas dos tablas lado a lado usando ReportLab?Varias tablas (5) una página usando 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

¿Has probado usando fr ames? Puede colocar 2 marcos uno al lado del otro, y ajustar el ancho de la tabla para llenar cada cuadro (por lo que obliga a ReportLab a dibujar el siguiente), o añada manualmente un FrameBreak para pasar al siguiente. Debería ser capaz de resolver un ejemplo más tarde esta noche si nadie más responde para entonces. – Nitzle

Respuesta

4

Cree una tercera tabla que servirá como el depósito para las dos tablas que ha creado. Esta tabla tendrá dos columnas y una fila. Cada columna tendrá el tamaño de la tabla secundaria respectiva.

Ejemplo:

crear sus dos mesas en diferentes mesa de vars (por ejemplo tabla1, tabla2)

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

Ejemplo:
* Código de toda

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

funciona muy bien, pero no se puede obtener una imagen y un párrafo en la misma línea – radtek