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
> [email protected]
> 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
[email protected]
http://lists.python.it/mailman/listinfo/python