在我的flask-app中,我想看到生成的pdf预览,然后肯定打印并将其保存在我的application_base_folder中。 我可以在tmp目录上保存预览,但这不是我真正想要的。
我正在使用报告实验室创建pdf:
def gen_pdf(text):
output = cStringIO.StringIO()
c = canvas.Canvas(output)
c.drawString(100,100, text)
c.showPage()
c.save()
pdf_output=output.getvalue()
output.close()
return pdf_output
然后将pdf发送到带有我的表单的html模板以更新部分
class Form(wtforms.Form):
text = TextField('text')
@app.route('/finalize/pdf/')
def finalize_pdf():
form = Form(request.form)
pdf_output = gen_pdf(form.text.data)
return render_template('preview_pdf.html', form=form, pdf_output=pdf_output)
在html页面中,我有我可以更新文本的表单,POST值的按钮(它不会出现在视图finalize_pdf()中),以及pdf预览:
<form method='post' action={{ url_for('finalize_pdf') }}
{{ form.text }}
<input name='update' value='update'>
</form>
<br />
<embed src="{{ pdf_output }}" type="application/pdf" width='30%'>
这里的问题是&#34; src&#34;我猜可能正在寻找FS的路径?无论如何,它已经死了#34;有这个错误: UnicodeDecodeError:&#39; ascii&#39;编解码器不能解码位置11中的字节0x93:序数不在范围(128)
中我是否遗漏了某些东西,或者是否无法在html中嵌入/反对StringIO并且我必须在我的FS上的tmp_path中写入它?
答案 0 :(得分:0)
这有点晚了但你可以使用base64编码解决这个问题:
from base64 import b64encode
# in your view:
return render_template(..., pdf_output=b64encode(pdf_output))
你的模板:
<embed src="data:application/pdf;base64,{{ pdf_output }}" type="application/pdf" width='30%'>