Flask将PDF作为自己的页面进行处理

对于我的个人网站,我想为我的简历(PDF格式)设置一个单独的页面。 我尝试了多种方法,但我无法弄清楚如何让烧瓶处理PDF。

谢谢。 如果我需要更好地解释我正在尝试做什么,请告诉我。


对于这个问题的任何人来说,因为他们试图用Flask从数据库提供PDF文件。 将文件存储在数据库中时嵌入PDF并不像在静态文件夹中那样简单。 您必须使用make_response函数并为其提供合适的标题,以便浏览器知道如何处理二进制PDF数据,而不是像正常一样从视图函数中返回它。 这里有一些伪代码可以帮助你:

from flask import make_response

@app.route('/docs/<id>')
def get_pdf(id=None):
    if id is not None:
        binary_pdf = get_binary_pdf_data_from_database(id=id)
        response = make_response(binary_pdf)
        response.headers['Content-Type'] = 'application/pdf'
        response.headers['Content-Disposition'] = 
            'inline; filename=%s.pdf' % 'yourfilename'
        return response

如果您希望文件下载而不是在浏览器中显示,您可以将内容处置从“内联”更改为“附件”。 您也可以将此视图放在子域中,例如docs.yourapp.com而不是yourapp.com/docs。 最后一步是将此文档实际嵌入到浏览器中。 在任何你想要的页面上,只需使用rawrgulmuffin的策略:

<embed src="/docs/pdfid8676etc" width="500" height="375">

您甚至可以使用Jinja2模板创建src动态。 让我们把它放在doc.html中(注意大括号):

<embed src="/docs/{{doc_id}}">

然后在视图函数中,您只需使用适当的doc_id返回呈现的模板:

from flask import render_template

@app.route('/<id>')
def show_pdf(id=None):
    if id is not None:
        return render_template('doc.html', doc_id=id)

这通过简单的GET请求嵌入用户从数据库请求的文档。 希望这可以帮助任何人在数据库中处理大量的PDF!


你有两个选择。 您可以呈现使用静态PDF文件的模板,也可以呈现生成PDF的模板。 我会亲自去第一个选项。

这个SO问题致力于如何编写一个返回PDF的HTML页面。 你可以在你的jinja2模板中使用它。

这是一个快速和肮脏的方式来完成它。

<embed src="http://yoursite.com/the.pdf" width="500" height="375">

或者,您可以创建一个jinja2模板,该模板设置返回PDF所需的所有标题,然后说,

<img src="{{ url_for('static', filename='img.png', _external=True) }}" />

用一个称为static的视图函数返回pdf。

你可以阅读更多关于这个烧瓶片段的第二个选项


您可以在5行中使用flask send_filesend_static_file函数:

from flask import send_file, current_app as app

@app.route('/show/static-pdf/')
def show_static_pdf():
    with open('/path/of/file.pdf', 'rb') as static_file:
        return send_file(static_file, attachment_filename='file.pdf')

这段代码链接很有帮助

如果你想从某个目录发送文件,也可以使用send_from_directory

from flask import send_from_directory, current_app as app

@app.route('/show/PDFs/')
def send_pdf():
    return send_from_directory(app.config['UPLOAD_FOLDER'], 'file.pdf')

阅读关于send_from_directory更多信息

链接地址: http://www.djcxy.com/p/36461.html

上一篇: Flask handling a PDF as its own page

下一篇: How to embed a PDF file in a web site?