En el artículo explicaré también de forma práctica como incrustar estas gráficas en una aplicación Web hecha en TurboGears (pero el ejemplo es bastante genérico para aplicar lo mismo a otros Frameworks, SuperFrameWorks ó lo que sea).
01. Instalación de reportlab.
02. Empleo con una aplicación TurboGears.
01. Instalación. (en Debian)
# apt-get install python2.4-reportlab python2.4-reportlab-accel libjpeg62
El paquete renderPM parece que está roto en Debian así que hay que bajarlo e instalarlo a mano:
# wget -c http://www.reportlab.org/daily/renderPM-1.01-daily-unix.tgz
# tar xfvz renderPM-1.01-daily-unix.tgz
# cd renderPM-1.01-20060717/
# cd renderPM/
# python setup.py build
# python setup.py install
Es necesario las fuentes de Adobe en el directorio:
/usr/lib/python2.4/site-packages/reportlab/fonts
así que nos bajamos pej. el Acrobat 5.0 y las copiamos; en Windows están en el siguiente directorio:
C:\Archivos de programa\Adobe\Acrobat 5.0\Resource
Ahora ya podemos usar en nuestra instalación de Python las librerías de reportlab. Pej. lo usaremos a continuación en una aplicación TurboGears.
02. Usando reportlab para generar un gráfico de barras simple.
@expose()
def genera(self):
from reportlab.lib import colors
from reportlab.graphics.shapes import Drawing
from reportlab.graphics.charts.barcharts import VerticalBarChart
drawing = Drawing(600, 600)
data = [ (13, 5, 20, 22, 37, 25), (14, 6, 21, 23, 38, 26) ]
bc = VerticalBarChart()
bc.x = 50
bc.y = 50
bc.height = 500
bc.width = 500
bc.data = data
bc.strokeColor = colors.black
bc.valueAxis.valueMin = 0
bc.valueAxis.valueMax = 50
bc.valueAxis.valueStep = 10
bc.categoryAxis.labels.boxAnchor = 'ne'
bc.categoryAxis.labels.dx = 8
bc.categoryAxis.labels.dy = -2
bc.categoryAxis.labels.angle = 30
bc.categoryAxis.categoryNames = ['Jan-99','Feb-99','Mar-99',
'Apr-99','May-99','Jun-99']
drawing.add(bc)
from reportlab.graphics.shapes import Drawing,Image
from reportlab.graphics.shapes import Circle
from reportlab.lib import colors
from reportlab.graphics.charts.textlabels import Label
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.cidfonts import CIDFont
from reportlab.graphics import renderPS, renderPM
renderPM.drawToFile(bc, 'mch/static/images/reportlab/example1.jpg',
'JPG')
redirect ('/static/images/reportlab/example1.jpg'
El redirect lo he dejado para que se pueda ver en qué URL va a dejar el JPG, ahora que lo sabemos sólo rendremos que poner esta ruta en el template donde lo queramos incrustar y aparecera el gráfico.


Comments
Usar fuentes que no sean de adobe
Como puedo usar fuentes que no sean de Adobe?
Mas especificamente de un sistema linux.?
Re: Usar fuentes que no sean de adobe
Sí, se puede hacer, puedes usar otras fuentes, lo que ocurre es que por defecto reportlab requiere una fuente en cocreto en el directorio de fonts/ (ahora mismo no recuerdo cuál era), pero nada más lo cargues sino la tienes da error así que la podrás identificar enseguida. Lo que se puede hacer es hacer un enlace simbólico a la fuente que quieras usar por defecto con el nombre de la fuente que busca.
Enviar un comentario nuevo