如何使用flask发送pdf文件以进行ajax响应?
我试图在浏览器中显示 pdf 文件而不为用户下载它。所以目前我有一个 Flask 函数,可以使用 FPDF 模块生成 pdf 文件,我需要它在新选项卡中显示给用户。
当前的flask函数是
@app.route('/pdf/create', methods=['GET', 'POST'])
def create_pdf():
if not session.get('email'):
return redirect(url_for('login_page'))
email = session.get('email')
pdf = FPDF('P', 'mm', "A4")
pdf.add_page()
.... pdf making ...
pdf.output(f"pdf/mypdf.pdf")
return send_file(f"pdf/mypdf.pdf",
mimetype='application/pdf',
attachment_filename=f"My file.pdf",
as_attachment=True,
cache_timeout=-1)
我将ajax函数称为
$("#viewFile").on("click",function(){
$.ajax({
url: "{{url_for('create_pdf')}}",
type: "get",
data: {text: mytext},
success: function(response) {
window.open(response);
},
error: function(xhr) {
alert("Error: Failed to save notes.");
}
});
});
I am trying to display a pdf file in the browser without downloading it for the user. So currently I have a flask function that can generate a pdf file using FPDF module and I need it to be displayed to the user in a new tab.
The current flask function is
@app.route('/pdf/create', methods=['GET', 'POST'])
def create_pdf():
if not session.get('email'):
return redirect(url_for('login_page'))
email = session.get('email')
pdf = FPDF('P', 'mm', "A4")
pdf.add_page()
.... pdf making ...
pdf.output(f"pdf/mypdf.pdf")
return send_file(f"pdf/mypdf.pdf",
mimetype='application/pdf',
attachment_filename=f"My file.pdf",
as_attachment=True,
cache_timeout=-1)
I call the ajax function as
$("#viewFile").on("click",function(){
$.ajax({
url: "{{url_for('create_pdf')}}",
type: "get",
data: {text: mytext},
success: function(response) {
window.open(response);
},
error: function(xhr) {
alert("Error: Failed to save notes.");
}
});
});
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
使用参数
as_attachment
,您可以指定浏览器是否应保存文件或提供该文件以供显示。如果该值设置为False
,则应显示该文件。 (请参阅文档)以下示例还向您展示了如何您可以发送 PDF 文档,无需暂时保存。
在这种情况下,不需要使用 AJAX。一个带有目标的简单锚点就可以解决问题。
Flask (app.py)
HTML (templates/index.html)
With the parameter
as_attachment
you can specify whether the browser should save the file or offer it for display. If the value is set toFalse
, the file should be displayed. (See documentation)The following example also shows you how you can deliver the pdf document without saving it temporarily.
The use of AJAX is not necessary in this case. A simple anchor with a target should do the trick.
Flask (app.py)
HTML (templates/index.html)