febrero 18, 2014

ReportLab: Platypus - Sobre las tablas (15)

Las tablas trabajan con un mecanismo de grilla, se ajustan al contenido. Entre sus argumentos principales tenemos:

Table(data, colWidths=None, rowHeights=None, style=None)

La data debe ser texto, instancias de Flowables, una lista o una tupla. colWidths es el ancho de las columnas, asi como el alto sería rowHeights. Para poner los estilos se puede usar el método setStyle. Además tenemos TableSyle, como veremos su uso en el ejemplo, pero sea cuál sea el método que usemos, los argumentos disponibles son:



FONT
FONTNAME or FACE
FONTSIZE or SIZE
LEADING
TEXTCOLOR
ALIGN or ALIGNMENT
LEFTPADDING
RIGHTPADDING
BOTTOMPADDING
TOPPADDING
BACKGROUND
ROWBACKGROUNDS  Son una lista de colores ciclico por ejemplo: (color1, color2)
COLBACKGROUNDS
VALIGN  Puede ser TOP, MIDDLE o BOTTOM
INNERGRID  Linea dentro del grid
BOX  Lineas alrededor del grid
GRID  Combinación de box e innergrid
LINEBELOW  Linea arriba
LINEABOVE  Linea abajo
LINEBEFORE  Línea antes Ej: ('LINEBEFORE',(2,1),(2,-2),1,colors.pink)
LINEAFTER  Línea posterior
SPAN  Combinar celdas

Veamos el ejemplo, en el que mostramos las distintas propiedas, incluyendo combinación de celdas e insersión de párrafos e imágenes.


import os
#Librerias reportlab a usar:
from reportlab.platypus import (SimpleDocTemplate, PageBreak, Image, Spacer,
Paragraph, Table, TableStyle)
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors

doc = SimpleDocTemplate("test.pdf", pagesize = A4)
story=[]

#Ejemplo 01
t = Table([
        ['', 'Ventas', 'Compras'], 
        ['Enero', 1000, 2000], 
        ['Febrero', 3000, 100.5],
        ['Marzo', 2000, 1000],
        ['Abril', 1500, 1500]
    ], colWidths=80, rowHeights=30)
t.setStyle([
        ('TEXTCOLOR', (0, 1), (0, -1), colors.blue),
        ('TEXTCOLOR', (1, 1), (2, -1), colors.green),
        ('BACKGROUND',(1,1),(-1,-1),colors.cyan),
        ('BOX',(1,1),(-1,-1),1.25,colors.yellow),
        ('INNERGRID',(1,1),(-1,-1),1,colors.red),
        ('VALIGN', (0,0), (-1, -1), 'MIDDLE'),
    ])
story.append(t)
story.append(Spacer(0,15))

#Ejemplo02
datos = (
        ('Nombre ciclo', 'Núm. Alumnos', 'Núm aprobados'),
        ('Desarrollo Aplic. Informáticas', 15, 5),
        ('Admin. Sist. Informáticos', 40, 25),
        ('Explotación Sist. Informáticos', 50, 20)
    )
tabla = Table(data = datos,
              style = [
                       ('GRID',(0,0),(-1,-1),0.5,colors.grey),
                       ('BOX',(0,0),(-1,-1),2,colors.black),
                       ('BACKGROUND', (0, 0), (-1, 0), colors.pink),
                       ]
              )
story.append(tabla)
story.append(Spacer(0,15))

#Ejemplo 03
estiloTabla = TableStyle([
     ('LINEABOVE', (0,0), (-1, 0), 2, colors.green),
     ('ALIGN', (1,1), (-1, -1), 'RIGHT'),
     ('ROWBACKGROUNDS', (0,0), (-1, -1), (colors.yellow, None)),
     
    ])
estiloTabla.add('BACKGROUND', (0,0), (-1,0), colors.Color(0, 0.7, 0.7))
t = Table([
        ['', 'Ventas', 'Compras'], 
        ['Enero', 1000, 2000], 
        ['Febrero', 3000, 100.5],
        ['Marzo', 2000, 1000],
        ['Abril', 1500, 1500]
    ], style = estiloTabla)

#Ejemplo 04: CELDAS COMPLEJAS
estilo = getSampleStyleSheet()
I = Image('tuxTemplario.png', width=100, height=100)

P1 = Paragraph('''El tux templario''', estilo["BodyText"])
P2 = Paragraph('''Viva Linux''', estilo["BodyText"])

t = Table(
    data=[
        ['A',   'B', 'C',     P1, 'D'],
        ['00', '01', '02', [I,P2], '04'],
        ['10', '11', '12', '13', '14'],
        ['20', '21', '22',  '23', '24'],
        ['30', '31', '32',  '33', '34']
    ],
    style=[
        ('GRID',(1,1),(-2,-2),1,colors.green),
        ('BOX',(0,0),(1,-1),2,colors.red),
        ('LINEABOVE',(1,2),(-2,2),1,colors.blue),
        ('LINEBEFORE',(2,1),(2,-2),1,colors.pink),
        ('BACKGROUND', (0, 0), (0, 1), colors.pink),
        ('BACKGROUND', (1, 1), (1, 2), colors.lavender),
        ('BACKGROUND', (2, 2), (2, 3), colors.orange),
        ('BOX',(0,0),(-1,-1),2,colors.black),
        ('GRID',(0,0),(-1,-1),0.5,colors.black),
        ('VALIGN',(3,0),(3,0),'BOTTOM'),
        ('BACKGROUND',(3,0),(3,0),colors.limegreen),
        ('BACKGROUND',(3,1),(3,1),colors.khaki),
        ('ALIGN',(3,1),(3,1),'CENTER'),
        ('BACKGROUND',(3,2),(3,2),colors.beige),
        ('ALIGN',(3,2),(3,2),'LEFT'),
    ]
)
story.append(t)

#Ejemplo 05: Combinación de celdas

t=Table(
    data=[
        ['Arriba\nIzquierda', '', '02', '03', '04'],
        ['', '', '12', '13', '14'],
        ['20', '21', '22', 'Abajo\nDerecha', ''],
        ['30', '31', '32', '', '']
    ],
    style=[
        ('GRID',(0,0),(-1,-1),0.5,colors.grey),
        ('BACKGROUND',(0,0),(1,1),colors.palegreen),
        ('SPAN',(0,0),(1,1)),
        ('BACKGROUND',(-2,-2),(-1,-1), colors.pink),
        ('SPAN',(-2,-2),(-1,-1)),
    ])
story.append(Spacer(0, 10))
story.append(t)

doc.build(story)
os.system("test.pdf")

4 comentarios:

  1. Lastima que no pusieras el dibujo de cada uno de los ejemplos. Un ejemplo completo vale mas que mil palabras. Bueno,.. para la otra será.

    ResponderEliminar
    Respuestas
    1. Jajaja pone los ejemplos en foto al principio todos juntos, supongo que solo es cosa de poner más atención y ser más agradecido con estos tutoriales que son gratuitos. Bueno,para la otra será

      Eliminar
  2. Jajaja pone los ejemplos en foto al principio todos juntos, supongo que solo es cosa de poner más atención y ser más agradecido con estos tutoriales que son gratuitos. Bueno,para la otra será

    ResponderEliminar
  3. Mente Leal: Reportlab: Platypus - Sobre Las Tablas (15) >>>>> Download Now

    >>>>> Download Full

    Mente Leal: Reportlab: Platypus - Sobre Las Tablas (15) >>>>> Download LINK

    >>>>> Download Now

    Mente Leal: Reportlab: Platypus - Sobre Las Tablas (15) >>>>> Download Full

    >>>>> Download LINK

    ResponderEliminar