Re: [Python-es] Rotar tablas en ReportLab?

228 views
Skip to first unread message

DBpp

unread,
Apr 5, 2010, 2:00:01 PM4/5/10
to pyth...@python.org
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
> realizo un reporte cuyas tablas son muy grandes y ni siquiera disminuyendo
> el tipo de letra, el padding y otras cosas logro ajustarlas a la hoja.
>
> Se que
> podr�a intentar rotarla por c�digo sin utilizar reportlab pero eso no me
> rotar�a como tal el contenido de la tabla, es decir, el contenido seguir�a
> horizontal.
>
>
> Gracias de antemano,
>
> Boris.

¿No sería preferible cambiar la orientación a landscape en vez de portrait
para esas páginas en concreto?
_______________________________________________
Python-es mailing list
Pyth...@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

Boris Perez Canedo

unread,
Apr 6, 2010, 9:25:09 AM4/6/10
to La lista de python en castellano
> 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
>> realizo un reporte cuyas tablas son muy grandes y ni siquiera disminuyendo
>> el tipo de letra, el padding y otras cosas logro ajustarlas a la hoja.
>>
>> Se que
>> podr�a intentar rotarla por c�digo sin utilizar reportlab pero eso no me
>> rotar�a como tal el contenido de la tabla, es decir, el contenido seguir�a
>> horizontal.
>>
>>
>> Gracias de antemano,
>>
>> Boris.
>
> ¿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

DBpp

unread,
Apr 6, 2010, 10:22:14 AM4/6/10
to pyth...@python.org
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)

Boris Perez Canedo

unread,
Apr 7, 2010, 8:38:27 AM4/7/10
to La lista de python en castellano
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.


Reply all
Reply to author
Forward
0 new messages