[Python-es] Rotar tablas en ReportLab?
Boris Perez Canedo
inf200523 en ucf.edu.cu
Mie Abr 7 14:38:27 CEST 2010
> On Martes 06 Abril 2010 15:25:09 Boris Perez Canedo escribió:
>>
> On Viernes 02 Abril 2010 14:33:23 Boris Perez Canedo escribi�:
>>
>> Hola,
>> >>
>> >> Es posible rotar una
tabla con su
>>
>> contenido en reportlab? Sucede que
>> > �No
>>
>> ser�a preferible cambiar la
orientaci�n a landscape en vez de portrait
>>
>> > para esas
p�ginas en concreto?�
>>
>> �Hola y gracias por
>>
la respuesta,
>>
>> Soy bastante nuevo con reportlab. C�mo hago
para hacer
>> lo que dices arriba? y c�mo puedo determinar si una consulta
me va producir
>> una tabla que se saldr� de los l�mites para entonces
cambiar la
>> orientaci�n para esas p�ginas?
>>
>>
>> Saludos,
>> Boris.
>>
>>
>> ---
>> La mejor vacuna contra el virus A(H1N1) es la higiene
personal
>>
> cuando generes el documento utiliza
pagesize=landscape(A4)
> A4 si es el tamaño de página que usas.
> Te pego el siguiente código de ejemplo de las listas de reportlab:
> def go():
> doc = SimpleDocTemplate("phello.pdf")
>
Story = [Spacer(1,2*inch)]
> style = styles["Normal"]
> for
i in range(100):
> bogustext = ("This is Paragraph number %s. " % i)
*20
> p = Paragraph(bogustext, style)
> Story.append(p)
>
Story.append(Spacer(1,0.2*inch))
> from reportlab.lib.pagesizes import A4,
LETTER, landscape, portrait
> doc.pagesize = landscape(A4)
>
doc.build(Story, onFirstPage=myFirstPage, onLaterPages=myLaterPages)
Hola,
Ya probe lo del landscape, pero aun asi las tablas se salen del
area, en verdad son muy grandes, lo que hice fue dividirlas en otras tablas utilizando
esta funcion:
def split(table, table_style, table_align, availableSpace,tablas = []):
tb = Table(table)
tb.setStyle(table_style)
tb.hAlign = table_align
if
tb.minWidth() <= availableSpace:
tablas.append(tb)
else:
indexes = range(len(table[0]))
indexes.sort(reverse = True)
for x in indexes:
pos = x
newTable = [
y[0:x] for y in table]
tb = Table(newTable)
tb.setStyle(table_style)
tb.hAlign =
table_align
if
tb.minWidth() <= availableSpace:
tablas.append(tb)
break
splitNew = [y[pos:] for y in table]
split(splitNew, table_style, table_align,
availableSpace, tablas)
Me funciona bastante bien, pero hay que tener cuidado
con los estilos porque si al dividir una tabla resulta una que tiene solo una columna y
el estilo general define mas de una columna te da un error de indice.
Tengo un
problema para definir el valor para availableSpace este debe ser igual al por ejemplo
A4[0] - 2*margen. Cómo obtengo el margen?
Saludos,
Boris.
---
La mejor vacuna contra el virus A(H1N1) es la higiene personal
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20100407/b039af68/attachment.html>
Más información sobre la lista de distribución Python-es