7

mam metodę, która generuje plik PDF przy użyciu ReportLab Biblioteka:Jak zapisać wygenerowane pliki PDF z ReportLab do magazynu danych w 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) 

kiedy wywołanie tej metody, to otwiera okno dialogowe zapisywania, gdzie może określić, gdzie plik ma zostać zapisany.

Jak mogę zrobić, aby zapisać wygenerowany plik pdf w Datastore?

Z góry dzięki!

Odpowiedz

8

1) Można określić tylko żądaną nazwę pliku (nie docelowy)

2) Spróbuj (nie badane)

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

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

Wymień

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

z

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

Dzięki russenreaktor! Edytowałem dwa wiersze Twojej odpowiedzi =). Działa jak urok !. – Lucas

Powiązane problemy