2015-11-19 7 views
0

У меня есть функция, которая генерирует PDF-файл, и у меня есть сайт Flask. Я хотел бы объединить эти два, чтобы при посещении сайта был создан и загружен PDF-файл. Я работаю над объединением различных фрагментов кода, которые я не совсем понимаю. PDF создается и загружается, но при попытке его открыть никогда не загружается. Что мне не хватает?Загрузка ReportLab PDF с Flask - Python

import cStringIO 
from reportlab.lib.enums import TA_JUSTIFY 
from reportlab.lib.pagesizes import letter 
from reportlab.platypus import SimpleDocTemplate, Paragraph 
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle 
from flask import make_response, Flask 
from reportlab.pdfgen import canvas 

app = Flask(__name__) 
@app.route('/') 
def pdf(): 

    output = cStringIO.StringIO() 
    doc = SimpleDocTemplate("test.pdf",pagesize=letter) 
    Story=[] 

    styles=getSampleStyleSheet() 
    styles.add(ParagraphStyle(name='Justify', alignment=TA_JUSTIFY)) 
    ptext = '<font size=12>test</font>' 

    Story.append(Paragraph(ptext, styles["Justify"])) 

    doc.build(Story) 
    pdf_out = output.getvalue() 
    output.close() 

    response = make_response(pdf_out) 
    response.headers['Content-Disposition'] = "attachment; filename='test.pdf" 
    response.mimetype = 'application/pdf' 
    return response 
app.run() 
+0

Ваш код будет работать, если вы измените этот 'doc = SimpleDocTemplate (" test.pdf ", pagesize = letter)' line to 'doc = SimpleDocTemplate (output, pagesize = letter)' –

ответ

3

Вы можете использовать настой для send_file-х обслуживающих файлов:

from Flask import send_file 
return send_file('test.pdf', as_attachment=True) 

С as_attachment=True вы можете заставить клиента загрузить файл вместо просмотра его в браузере.

+0

@thanks для улова по правописанию , Загрузка файла, но дает ошибку, когда я пытаюсь ее открыть. Кроме того, решение 'send_file' приводит к ошибке внутреннего сервера при попытке открыть страницу. Есть предположения? – user2242044

+0

Не могли бы вы разместить сообщения об ошибках? Загружает ли файл test.pdf тот же размер, что и созданный в корневом каталоге приложения? – Dauros

+0

PDF составляет 0 КБ. Тот, который работает, составляет 2 КБ. При открытии с помощью Adobe Reader появляется следующее сообщение об ошибке: «Adobe Reader не смог открыть« test.pdf », потому что это либо не поддерживаемый тип файла, либо потому, что файл поврежден (например, он был отправлен в виде электронной почты вложение и неправильно декодировано). – user2242044