Christoph Zwerschke wrote:
> marcelo ametller wrote:
>
>> I have a servlet, with a form, a button with label "generate".
>> When the user press the button, de "action" run a function, it generate
>> a pdf (reportlab).
>> When the pdf have 200 items, that's ok. But when the pdf have 6000
>> items, the appserver crash. The dmesg inform that there isn't memory...
>
>
> Does this crash immediately after you start the appserver and generate
> the very first pdf? Or does it only happen after some time when more
> users have been on the server?
it only crash after some time... the time for generate de pdf is 20min.
>
> What do you get in the Webware logfile?
nothing...
>
> Do you create the pdf in memory only or do you write it to a file?
i not know that...
i paste de code here:
action for the botton:
def generar(self):
fecha1=self.form.field('fecha1').value()
fecha2=self.form.field('fecha2').value()
self.session().setValue('fecha1', fecha1)
self.session().setValue('fecha2', fecha2)
url='/menu/fac/inf/v/libFactR1'
self.response().sendRedirect(url)
self.writeBody()
part of the servlet:
def writeHTML(self):
req=self.request()
self.fecha1=self.session().value('fecha1')
self.fecha2=self.session().value('fecha2')
self.empresa = empresa.nombre
self.titulo = "Resumen Libro Facturacion - Facturas generadas entre %s
- %s" % (self.fecha1,self.fecha2)
fact= Fact1()
#consulta sql (return 6000 regs for 10 columns)
self.listado= fact.lisLibFactR1(self.fecha1,self.fecha2)
buffer=StringIO()
doc = SimpleDocTemplate(buffer,pagesize=A4,leftMargin=3*cm)
doc.setTitle=self.titulo
doc.setAuthor='operador'
Story = []
data=self.listado
colwidths=(10*cm,2*cm)
t=Table( data, colwidths)
t.setStyle(TableStyle([('VALIGN',(0,0),(-1,-1),'MIDDLE'),
('GRID',(0,0),(-1,-1), 0,colors.grey), ('BOX', (0,0), (-1,-1),
1, colors.black), ]))
Story.append(t)
Story.append(Spacer(1,0.2*cm))
doc.build(Story, onFirstPage=self.myFirstPage,
onLaterPages=self.myLaterPages)
pdf=buffer.getvalue()
buffer.close()
self.response().setHeader('Content-Type', 'application/pdf')
self.response().setHeader('Content-Length', str(len(pdf)))
self.response().setHeader('Content-Disposition', 'inline;
filename="ReslibFact.pdf"')
self.write(pdf)
thanks for you time...
Marcelo
|