Graficas en páginas Web: TurboGears + reportlab

Manel's picture
Este artículo trata de explicar un modo sencillo y rápido de poder tener páginas Web con gráficos de barras, pastel... la idea es emplear Reportlab que es una herramientas Python profesional, muy potente y  libre que permite generar gráficos, documentos, facturas...

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

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
maram's picture

Usar fuentes que no sean de adobe

Como puedo usar fuentes que no sean de Adobe?
Mas especificamente de un sistema linux.?

Manel's picture

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.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Enviar un comentario nuevo

Security question, designed to stop automated spam bots
El contenido de este campo se mantiene como privado y no se muestra públicamente.
  • Etiquetas HTML permitidas: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Saltos automáticos de líneas y de párrafos.

Más información sobre opciones de formato