7

Tengo un método que genera un archivo PDF utilizando la biblioteca ReportLab:Cómo ahorrar PDF generado con ReportLab al almacén de datos de App Engine Python

def obtenerPDFNuevoPedido(self, handler,rsUsuarioPedido, rsPedido): 
    handler.response.headers['Content-Type'] = 'application/pdf' 
    handler.response.headers['Content-Disposition'] = 'attachment; filename=output.pdf' 
    story = [] 
    story.append(Paragraph('CHIPAS', ParagraphStyle(name="centeredStyle", alignment=TA_CENTER, fontSize=20))) 
    story.append(Paragraph('____________ENLANUBE', ParagraphStyle(name="centeredStyle", alignment=TA_CENTER, fontSize=20))) 
    story.append(Spacer(6, 22)) 
    story.append(Table([[Paragraph(str(strftime("%Y-%m-%d", gmtime())), ParagraphStyle(name="centeredStyle", alignment=TA_LEFT, fontSize=7)), 
    Paragraph(str(strftime("%H:%M:%S", gmtime())), ParagraphStyle(name="centeredStyle", alignment=TA_RIGHT, fontSize=7))]],colWidths=[5.05 * cm, 3.1 * cm])) 
    story.append(Paragraph("DEVELOPED AT ROSHKA-LABS", ParagraphStyle(name="centeredStyle", alignment=TA_CENTER, fontSize=6))) 
    story.append(Paragraph('-'*50, styleCentered)) 
    #... 
    #... 
    doc = SimpleDocTemplate(handler.response.out, pagesize=letter) 
    doc.build(story) 

cuando llamo a ese método, se abre un cuadro de diálogo guardar, donde puede especificar dónde se debe guardar el archivo.

¿Cómo debo hacer para guardar el archivo pdf generado en el almacén de datos?

¡Gracias de antemano!

Respuesta

8

1) Puede especificar el nombre de archivo sólo se desea (no destino)

2) Prueba esto (no probado)

#define your database structure 
from google.appengine.ext import db 

class PdfStorage(db.Model): 
    timeAdded = db.DateTimeProperty(auto_now_add=True) 
    pdfContent = db.BlobProperty() 

reemplazar su

doc = SimpleDocTemplate(handler.response.out, pagesize=letter) 
doc.build(story) 

con

pdf = StringIO() 


doc = SimpleDocTemplate(pdf, pagesize=letter) 
doc.build(story) 

#get content of generated pdf 
content = pdf.getvalue() 

#save to db 
pdfStorage = PdfStorage(pdfContent = content); 
pdfStorage.put() 

#output to browser 
handler.response.write(content) 
+1

Gracias russenreaktor! Edité dos líneas de tu respuesta =). ¡Funciona como el encanto !. – Lucas

Cuestiones relacionadas