[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