febrero 13, 2014

ReportLab: Platypus - Frames (11)

Los Frames son contenedores activos, quienes a su vez son contenidos en un PageTemplates. Tienen una localización y tamañon, manteniendo el concepto de espacio dibujable restante.

Frame (x1, y1, ancho, alto, leftPadding=6, bottomPadding=6, rightPadding=6, topPadding=6, id=None, showBoundary=0)

El comando anterior, crear una instancia del Frame con cordenadas x,y que son relativas a la página en uso. Los Padding reducen espacio para dibujar. El id, sirve como un identificador (ej: 'ColumnaDerecha'). Si el showBoundary es distinto de cero, se mostrará las fronteras del frame en tiempo de ejecución.

- Frame.addFromList(drawList, canvas) Añade la lista de flowables
- Frame.split(flowable, canvas) Devuelve una lista de flowables
- Frame.drawBoundary(canvas) Dibuja el marco del Frame


ReportLab. Platypus - Flowables (10)

Ya vimos en temas anteriores el nivel más bajo de todos, el pdfgen.canvas. Ahora veremos las capas superiores, que en su conjunto serán usadas por Platypus.

El Flowables es una clase abstracta para cosas que pueden ser dibujadas; por ejemplo: los párrafos y las tablas. Usa métodos como:

- Flowable.drawOn(canvas, x, y) Envía el flowable a un canvas en particular. Maneja el traslado de las coordenadas del canvas (x,y) , de manera que dicho canvas pueda dibujar el flowable en un frame de coordenadas absolutas.

- Flowable.wrap(width, height) Calcula el espacio que usará el flowable.

ReportLab: Platypus - Entendiendo la relación con pdfgen.canvas (09)

Platypus (Page Layout and Typography Using Scripts), es una librería para disponer las páginas en un alto nivel, permitiendonos crear documentos complejos con poco esfuerzo.

Platypus busca separar el diseño del contenido de los documentos. Así por ejemplo, los párrafos son construidos usando estilo de párrafos, y las páginas usando plantillas. De esta forma, si se crea un millar de páginas, bastará con modificar las especificaciones de estilo para que resulte efecto en todo el documento.

Platypus usa un diseño de capas:

DocTemplates: Es la plantilla del documento.
PageTemplates: Es la plantilla para las páginas.
Frames: Son las regiones en las páginas que contienen texto o gráficos
Flowables: Elementos de texto ó gráficos que están incrustados en el documento (párrafos, tablas, imágenes, pero no pies de página)
pdfgen.Canvas: El que se encarga de pintar el documento, a partir de las órdenes de las otras capas superiores.

El gráfico siguiente lo explica mejor ( Los de color púrpura son los Frames):


febrero 06, 2014

Python: Convertir variable a cadena

Una de las cosas particulares que encontré en la red, fue el de convertir una variable en una cadena.
Claro, algunos no le verán el sentido, ya que se podría usar diccionarios, pero sé que en algún momento podría ser útil.


febrero 04, 2014

Mostrar Folder con python en multiplataforma

Al crear una aplicación quería lanzar un Folder, para que el usuario lo viera. Me encontré con varias soluciones, pero no las he probado todas en multiplataforma.


Supongo que la desición radica en cúan multiplataforma es la solución, como en el caso de Linux, si la solución se aplica a la mayoría de distros.

Solución 01
import os
import platform

def open_file(path):
    if platform.system() == "Windows":
        os.startfile(path)
    elif platform.system() == "Darwin":
        subprocess.Popen(["open", path])
    else:
        subprocess.Popen(["xdg-open", path])

open_file(path)

febrero 03, 2014

ReportLab: Insertando Fuentes TTF (08)

Insertar fuentes TrueType, se puede realizar no solo con pdfgen.canvas, sino también con platypus (que lo veremos más adelante).

ReportLab: Encoding UTF8 - Solución UnicodeDecodeError: 'utf8' (07)

El error siguiente: UnicodeDecodeError: 'utf8' codec can't decode bytes in position... 


por lo general aparece cuando leemos datos de otra fuente el cuál contiene datos en bytes, como latin-1, ANSI, estos se necesitan convertir a Unicode. Python provee tal conversión, por lo tanto la solución es inmediata.