Thank you José, this is strange because with 1.9.4 I have no problem.
This is the core part of the function: in the html view I have a link to
generate the pdf.
## Before I create a table for html rendering
if request.extension=="pdf":
import os
from gluon.contrib.pyfpdf import FPDF, HTMLMixin
# create a custom class with the required functionalities
class MyFPDF(FPDF, HTMLMixin):
def header(self):
"hook to draw custom page header"
#logo=os.path.join(request.env.web2py_path,"applications","digitalcosting_3","static","images","g3001.png")
logo=os.path.join(request.env.web2py_path,request.folder,"static","images","g3001.png")
self.image(logo,10,8,50)
self.set_font('Arial','',12)
self.cell(5) # padding
#self.cell(60,10,"Rif. Preventivo n.12",0,0)
self.ln(20)
def footer(self):
"hook to draw custom page header (printing page numbers)"
self.set_y(-15)
self.set_font('Helvetica','I',8)
txt = 'Pagina %s of %s' % (self.page_no(),
self.alias_nb_pages())
self.cell(0,10,txt,0,0,'C')
pdf=MyFPDF()
pdf.set_top_margin(30)
pdf.set_right_margin(10)
pdf.set_font('times','',12)
# create a page and serialize/render HTML objects
pdf.add_page()
txt="Rif. Preventivo n.%s"%(idprev,)
txt_ana=mypdf[0].daticli
txt_ana2=mycli[0].ragsoc
txt_ana3=mycli[0].indirizzo
txt_ana4=mycli[0].cap+" "+mycli[0].citta
txt_data="Rasai, %s"%(myprev[0].data_prev.strftime("%d-%m-%Y"))
txt_oggetto="Oggetto: "+ mypdf[0].oggetto
txt_testo1=mypdf[0].testo1
txt_testo2=mypdf[0].testo2
txt_testo3=mypdf[0].testo3
txt_testo4=mypdf[0].testo4
consegna=mypdf[0].consegna
pagamento=mypdf[0].pagamento+" "+pagam
foot=mypdf[0].footer
firma=mypdf[0].firma
firma2=mypdf[0].firma2
descrizione=unicode(myprev[0].descriz_est,'utf-8')
descrizione=descrizione.encode('iso-8859-1')
copie=myprev[0].copie_nom
pr1="eur "+splitThousands(mylastprev[0].prezzo_off1)
pr1t="eur "+splitThousands(mylastprev[0].pr_tot)
#copie2=myprev[0].copie_nom2
#pr2="eur "+splitThousands(mylastprev[0].prezzo_off2)
#pr2t="eur "+splitThousands(mylastprev[0].pr_tot2)
#copie3=myprev[0].copie_nom3
#pr3="eur "+splitThousands(mylastprev[0].prezzo_off3)
#pr3t="eur "+splitThousands(mylastprev[0].pr_tot3)
pdf.cell(190,10,txt,0,1)
pdf.cell(190,5,txt_ana,0,1,align="R")
pdf.cell(190,5,txt_ana2,0,1,align="R")
pdf.cell(190,5,txt_ana3,0,1,align="R")
pdf.cell(190,5,txt_ana4,0,1,align="R")
pdf.cell(190,10,txt_data,0,1,align="L")
pdf.cell(190,10,txt_oggetto,0,1,align="L")
pdf.ln(10)
pdf.multi_cell(190,10,txt_testo1,0,align="L")
pdf.ln(5)
pdf.cell(100,10,"Descrizione",1,0,align="C")
pdf.cell(30,10,"Qt Copie",1,0,align="C")
pdf.cell(30,10,"Euro/Copia",1,0,align="C")
pdf.cell(30,10,"Euro Totale",1,2,align="C")
pdf.set_x(110)
pdf.set_font_size(10)
pdf.cell(30,10,copie,0,0,align="C")
pdf.cell(30,10,pr1,0,0,align="C")
pdf.cell(30,10,pr1t,0,1,align="R")
if session.no_copie_alt !=True:
pdf.set_x(110)
pdf.cell(30,10,copie2,0,0,align="C")
pdf.cell(30,10,pr2,0,0,align="C")
pdf.cell(30,10,pr2t,0,1,align="R")
pdf.set_x(110)
pdf.cell(30,10,copie3,0,0,align="C")
pdf.cell(30,10,pr3,0,0,align="C")
pdf.cell(30,10,pr3t,0,1,align="R")
pdf.set_xy(10,145)
pdf.multi_cell(100,10,descrizione,0,align="L")
pdf.set_xy(10,175)
pdf.set_font('times','B',12)
pdf.cell(190,5,txt_testo2,0,1,align="C")
pdf.cell(190,5,txt_testo3,0,1,align="C")
pdf.cell(190,5,txt_testo4,0,1,align="C")
pdf.ln(5)
pdf.set_font('times','',12)
pdf.cell(190,10,consegna,0,1,align="L")
pdf.cell(190,10,pagamento,0,1,align="L")
pdf.multi_cell(190,10,foot,0,align="L")
pdf.cell(190,10,firma,0,1,align="R")
pdf.cell(190,10,firma2,0,1,align="R")
# prepare PDF to download:
response.headers['Content-Type']='application/pdf'
return pdf.output(dest='S')
else:
# normal html view:
return
dict(table=table,mypdf=mypdf,mylastprev=mylastprev,myprev=myprev,mycli=mycli,pagam=pagam)
Il giorno giovedì 29 novembre 2012 13:45:08 UTC+1, José Luis Redrejo
Rodríguez ha scritto:
>
> Hi Carlo
> I'm using fpdf without any problem, so I guess the reason is in some of
> the data you're passing to fpdf.
> The code of the controller would be needed to can lend you a hand.
>
> Regards
>
>
> 2012/11/29 carlo <[email protected] <javascript:>>
>
>> No error with web2py 1.9.4.
>>
>> With 2.2.1 I got this with Python 2.5 and Python 2.6
>>
>>
>> Traceback (most recent call last):
>> File "C:\Python25\web2py\gluon\restricted.py", line 212, in restricted
>>
>>
>> exec ccode in environment
>> File "C:/Python25/web2py/applications/Hcontrol/controllers/default.py"
>> <http://127.0.0.1:8000/admin/default/edit/Hcontrol/controllers/default.py>,
>> line 1000, in <module>
>>
>>
>> File "C:\Python25\web2py\gluon\globals.py", line 188, in <lambda>
>>
>>
>> self._caller = lambda f: f()
>>
>>
>> File "C:/Python25/web2py/applications/Hcontrol/controllers/default.py"
>> <http://127.0.0.1:8000/admin/default/edit/Hcontrol/controllers/default.py>,
>> line 558, in pdf_prev
>>
>>
>> pdf.add_page()
>> File "C:\Python25\web2py\gluon\contrib\fpdf\fpdf.py", line 284, in add_page
>>
>>
>> self.header()
>> File "C:/Python25/web2py/applications/Hcontrol/controllers/default.py"
>> <http://127.0.0.1:8000/admin/default/edit/Hcontrol/controllers/default.py>,
>> line 540, in header
>>
>>
>> self.image(logo,10,8,50)
>>
>>
>> File "C:\Python25\web2py\gluon\contrib\fpdf\fpdf.py", line 896, in image
>>
>>
>> info=self._parsepng(name)
>>
>>
>> File "C:\Python25\web2py\gluon\contrib\fpdf\fpdf.py", line 1749, in
>> _parsepng
>>
>>
>> color += re.sub('(.{3}).',lambda m: m.group(1),line, flags=re.DOTALL)
>>
>> TypeError: sub() got an unexpected keyword argument 'flags'
>>
>> --
>>
>>
>>
>>
>
>
--