2016-10-20 2 views
1

Ich kann ein PDF mit einem Bild mit dem folgenden Code generieren. Wie kann ich das generierte PDF aus einer Flask-Route zurückgeben?Rückgabe PDF generiert mit FPDF in Flask

from fpdf import FPDF 
pdf = FPDF() 
img = input('enter file name') 
g = img + '.jpg' 
pdf.add_page() 
pdf.image(g, 50, 50) 
pdf.output(img + '.pdf', 'F') 

Antwort

2

Verwenden make_response eine Antwort mit der PDF-Datenausgabe als Zeichenkette (dest='S') zu erstellen. Encode the output as latin-1, sonst codiert Flask es als UTF-8 und es ist möglicherweise nicht gültig. Stellen Sie die Header Content-Disposition und Content-Type so ein, dass der Browser eine PDF-Datei herunterladen/verarbeiten muss. Gebe die konstruierte Antwort zurück.

from flask import make_response 

@app.route('/jpg_to_pdf/<name>') 
def jpg_to_pdf(name): 
    pdf = FPDF() 
    pdf.add_page() 
    pdf.image(os.path.join(app.instance_path, name + '.jpg'), 50, 50) 
    response = make_response(pdf.output(dest='S').encode('latin-1')) 
    response.headers.set('Content-Disposition', 'attachment', filename=name + '.pdf') 
    response.headers.set('Content-Type', 'application/pdf') 
    return response 

Dieses Beispiel nimmt die Bilder im Ordner Instanz sind, zu ändern, wie notwendig, um Punkt zu, wo die Bilder tatsächlich sind.

+0

Danke, aber wie werde ich mein Bild zeigen, das in Blobstore hochgeladen wird – user3891081

+0

tatsächlich Google App Engine nicht erlauben, Bild in Temp-Ordner hochladen, müssen wir es in Blobstore zuerst hochladen, das ist, warum ich frage, wie werde ich Bild konvertieren (in Blobstore gespeichert) zu pdf. bitte helfen Sie mir – user3891081