Welcome | Members | News | Search | Documentacion | Foros |
You are here: Home » Miembros » forodejazz's Home » Cómo hacer etiquetas en PDF con Zope
 
You are not logged in
Link icon Log in Link icon Join
Log in
Name
Password

Cómo hacer etiquetas en PDF con Zope

Esta receta es un ejemplo básico de cómo sacar etiquetas en formato PDF con Zope. El texto que mostramos en la etiqueta es parametrizable, por supuesto.

Antes de nada, debemos instalarnos ReportLab (http://www.reportlab.com/).

Necesitamos dos 'DTML Methods' y un 'External Method'.

1. Nuestro primer 'DTML Method' es un formulario con un campito de texto:


<html>
<body>
<form action="<dtml-var expr="BASE2 + '/hacerPdf'">">
<br>Escribe tu nombre:     
<input type="text" name="nombre"> <br>
<input type="submit" name="enviar" value="Prueba"> 
</form>
</body>
</html>

Yo lo he llamado index_html para que sea lo primero que veamos.

2. Tenemos otro 'DTML Method' llamado 'hacerPdf', que hace de formulario respuesta e invoca al 'External Method':


<dtml-if expr="not REQUEST.has_key('enviar') or not REQUEST.has_key('nombre')">
    <dtml-var index_html>
<dtml-else>
	<dtml-if expr="REQUEST.nombre == ''">
    		<dtml-var index_html>
	<dtml-else>
		<dtml-call "RESPONSE.setHeader('content-type','application/pdf')">
		<dtml-call "RESPONSE.setHeader('Content-Disposition','inline;filename=somefile.pdf')">
		<dtml-var expr="test_reportlab(REQUEST.nombre)">
	</dtml-if>
</dtml-if>

3. Finalmente, tenemos el 'External Method' que es el que hace todo el trabajo. El código que sigue es un borrador. Sólo sirve de ejemplo:

# External Method 'test_reporlab'
import os
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4
from reportlab.lib.units import *

def generate_pdf_stream(canv, file):
    """
    canv: un objeto canvas
    file: un nombre de archivo"""
    canv.showPage()
    canv.save()
    fp = open(file, 'rb')
    y = fp.read() 
    fp.close()
    os.remove(file)
    return y 

def write_label(canv, coor, user_string):
    """
    canv: un objeto canvas
    coor: una tupla con coordenadas (x, y)
    """
    canv.drawString(coor[0]+10, coor[1]+5, user_string)
    

def main(user_string):
    pdf_file_name = 'test.pdf'
    my_canvas = canvas.Canvas(pdf_file_name, pagesize=A4)
    my_canvas.setFont("Helvetica", 10)
    paper_size = A4[0], A4[1]
    rows = 10
    cols = 3
    label_size = paper_size[0]/cols, paper_size[1]/rows
    for x in range(0, cols):
        for y in range(0, rows):
            coordinates = x*label_size[0], y*label_size[1]
            write_label(my_canvas, coordinates, user_string)
    return generate_pdf_stream(my_canvas, pdf_file_name)
    
if __name__ == '__main__':
    main("Probando ...")
Comment

Discussion icon Error al crear el metodo externo

Posted by: sergio_adan at 27-10-2003

Estoy probando el codigo, uso Zope para Windows, descargue el zip de reportlab y lo instale como un producto mas de Zope, hice en la carpeta de "Extensions" el archivo test_reporlab.py, luego al crear el Metodo Externo dentro de Zope con el mismo nombre "test_reporlab" marca lo siguiente:

Error Type: ImportError

Error Value: No module named reportlab.pdfgen

¿Estoy haciendo algo mal?

Comment

Discussion icon Error

Posted by: Roberto_Moreno at 24-11-2003

Me sucede lo mismo que el del anterior comentario, y ademas yo instale el report lab como decia en la pagina del report lab