in allegato... ho eliminato tutta la parte di configurazione di reportlab e
ho mantenuto solamente la funzione main che è quella che recupera l'id e
crea il pdf...

ciao

2008/10/7 Lawrence Oluyede <[EMAIL PROTECTED]>

> On Tue, Oct 7, 2008 at 9:22 AM, Zanon Samuele <[EMAIL PROTECTED]> wrote:
> > ciao a tutti... sto creando in python un file per la creazione, mediante
> > reportlab, di un file pdf con dei dati prelavati da una tabella mysql...
> il
> > mio problema è che dovrei recuperare un parametro passato allo script che
> è
> > presente sull'url. Esempio:
> > URL: http://miodominio.com/script.py?id=xx
> >
> > io devo recuperare il valore di id e passarlo alle query... il passaggio
> > alle query non è un problema, ma il mio problema è quello di recuperare
> il
> > parametro id... ho provato tramite cgi.FieldStorage, ma mi viene
> ritornato
> > l'errore: 500 Internal Server Error, eppure lo script non ha errori,
> visto
> > che eseguendolo dalla shell non mi da problemi...
>
> E` possibile vedere il codice? Almeno qualche riga al principio
>
> Probabilmente non hai inizializzato correttamente la parte cgi
>
>
> --
> Lawrence, stacktrace.it - oluyede.org - neropercaso.it
> "It is difficult to get a man to understand
> something when his salary depends on not
> understanding it" - Upton Sinclair
> _______________________________________________
> Python mailing list
> Python@lists.python.it
> http://lists.python.it/mailman/listinfo/python
>



-- 
Zanon Samuele
mailto:[EMAIL PROTECTED]
#!/usr/bin/env python

import os
import time
import random
import string
from reportlab.platypus import *
from reportlab.lib.styles import *
from reportlab.rl_config import defaultPageSize
from reportlab.lib.units import inch, cm
from reportlab.lib import colors

import cgi, cgitb
cgitb.enable()

import MySQLdb

PAGE_HEIGHT = defaultPageSize[1]
PAGE_WIDTH  = defaultPageSize[0]

# Definitions for text styles:
StandardStyle = ParagraphStyle('Standard', None)
StandardStyle.fontName = 'Times-Roman'
StandardStyle.fontSize = 10
StandardStyle.textColor = colors.black
StandardStyle.spaceAfter = 5
StandardStyle.backColor = colors.whitesmoke
TitleStyle = ParagraphStyle('Title', StandardStyle)
TitleStyle.fontName = 'LettErrorRobot-Chrome' # 'Times-Bold' AdobeSansMM
TitleStyle.fontName = 'Times-Bold'
TitleStyle.fontSize = 24
TitleStyle.spaceAfter = 30
TitleStyle.spaceBefore = 5
TitleStyle.align = "CENTER"
BoldStyle = ParagraphStyle('Bold', StandardStyle)
BoldStyle.fontName = 'Times-Bold'

def DefaultReportTableStyle(header_fontsize=8, cell_fontsize=6):
    
    return TableStyle([ \
            ('FONTNAME',   (0,0), (-1,0), "Courier"), \
            ('FONTSIZE',   (0,0), (-1,0), 14), \
            ('TEXTCOLOR',  (0,0), (-1,0), colors.midnightblue), \
            ('BACKGROUND', (0,0), (-1,0), colors.ghostwhite), \
            ('FONTNAME',   (0,1), (-1,-1), "Courier"), \
            ('FONTSIZE',   (0,1), (-1,-1), 10), \
            ('TEXTCOLOR',  (0,1), (-1,-1), colors.darkslateblue), \
            ('ALIGN',      (0,0), (-1,-1), "CENTER"), \
            ('VALIGN',     (0,1), (0,-1), 'TOP'), \
            ('VALIGN',     (0,0), (-1,0), 'TOP'), \
            ('LEFTPADDING',  (0,0), (-1,-1), 3), \
            ('RIGHTPADDING', (0,0), (-1,-1), 3), \
            ('TOPPADDING',   (0,0), (-1,-1), 1), \
            ('BOTTOMPADDING',(0,0), (-1,-1), 1), \
            ('GRID',         (0,0), (-1,-1), 0.5, colors.Color(0, 0, 0))
            ])

class FirstPageTemplate(PageTemplate):
    def __init__(self, id, pageSize=defaultPageSize):
        self.pageWidth = pageSize[0]
        self.pageHeight = pageSize[1]
        frame1 = Frame(inch, inch, self.pageWidth - 2*inch, self.pageHeight - 1.25*inch, id='FirstPage')
        PageTemplate.__init__(self, id, [frame1])  # note lack of onPage

    def afterDrawPage(self, canvas, doc):
        canvas.setAuthor("")
        canvas.setTitle("")
        canvas.setSubject("")
        canvas.saveState()
        # top line
        canvas.setLineWidth(1)
        # bottom line
        canvas.setLineWidth(0.5)
        canvas.line(inch, inch, doc.pagesize[0]-inch, inch)
        canvas.setFont('Times-Roman', 4)
        canvas.drawCentredString(PAGE_WIDTH / 2.0, inch*0.75, "- %d -" % doc.page)
        canvas.drawRightString(PAGE_WIDTH - inch, inch*0.75, doc.report_timestamp)
        # help line for punching
        canvas.setLineWidth(0.3)
        canvas.line(20, doc.pagesize[1] / 2, 25, doc.pagesize[1]/ 2)
        canvas.restoreState()

class OtherPagesTemplate(PageTemplate):
    def __init__(self, id, pageSize=defaultPageSize):
        self.pageWidth = pageSize[0]
        self.pageHeight = pageSize[1]
        frame1 = Frame(inch, inch, self.pageWidth - 2*inch, self.pageHeight - 2*inch, id='OtherPages')
        PageTemplate.__init__(self, id, [frame1])  # note lack of onPage

    def afterDrawPage(self, canvas, doc):
        canvas.saveState()
        # document title
        canvas.setFont('Times-Bold', 12)
        # current report title
        canvas.setFont('Times-Bold', 8)
        # top line
        canvas.setLineWidth(1)
        canvas.line(inch, doc.pagesize[1]-inch, doc.pagesize[0]-inch, doc.pagesize[1]-inch)
        # bottom line
        canvas.setLineWidth(0.5)
        canvas.line(inch, inch, doc.pagesize[0]-inch, inch)
        canvas.setFont('Times-Roman', 8)

        canvas.drawCentredString(PAGE_WIDTH/2.0, inch*0.75, "- %d -" % doc.page)
        canvas.drawRightString(PAGE_WIDTH - inch, inch*0.75, doc.report_timestamp)
        # help line for punching
        canvas.setLineWidth(0.3)
        canvas.line(20, doc.pagesize[1] / 2, 25, doc.pagesize[1]/ 2)
        canvas.restoreState()

class SipdamsDocTemplate(BaseDocTemplate):
    def afterInit(self):
        self.addPageTemplates(FirstPageTemplate('First', self.pagesize))
        self.addPageTemplates(OtherPagesTemplate('Later', self.pagesize))

def main():
    print 'Content-type: text/html\r\n'
    
    #Recupero l'id dell'ordine per la stampa
    form = cgi.FieldStorage()
    
    ord_id = form.getvalue('ord_id')
    
    if not (form.has_key('ord_id')):
        print '<h1>Errore:</h1>'
        print '<p>Nessun ordine specificato</p>'

    else:
         
        #Mi connetto al database
        conn = MySQLdb.connect(host="host", user="user", passwd="pass", db="nome_db")

        #Query1: Recupero i dati del destinatario dell'ordine
        sql1 = "SELECT * FROM ordini WHERE ID = '" + ord_id + "'"

        #Eseguo la query e memorizzo i dati restituiti
        cursore1 = conn.cursor()
        cursore1.execute(sql1)
        record1 = cursore1.fetchone()
        nome_cli = record1[1]
        q_ceste = record1[2]


        #==============Eseguo le operazioni per l'output del pdf==================
        NOW = time.strftime("%d/%m/%y %H.%M.%S", time.localtime(time.time())) 
        output_filename = "ordine_" + ord_id + ".pdf"

        doc = SipdamsDocTemplate(output_filename)
        doc.report_timestamp = NOW
        Report = []

        #Inserisco il logo
        ILogo = Image('../images/logo.jpg')
        ILogo.drawHeight = 2.5*inch*ILogo.drawHeight / ILogo.drawWidth
        ILogo.drawWidth = 2.5*inch
        ILogo.hAlign = 'CENTER'

        d = []
        d.append([ILogo, nome_cli])
        tblstyle = DefaultReportTableStyle()
        tblstyle.add('BACKGROUND', (0,0), (-1,0), colors.Color(255, 255, 255))
        
        tbl = Table(d, colWidths=PAGE_WIDTH/2.1 , rowHeights=None, style=tblstyle, repeatRows=0, repeatCols=0)
        tbl.hAlign='CENTER'
        Report.append(tbl)

        p = Paragraph("Ordine ceste natalizie", TitleStyle)
        Report.append(p)

        

        doc.build(Report)

main()
_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python

Reply via email to