Flask PDF预览

Flask PDF预览

Flask PDF预览

在Web开发中,经常会遇到需要生成PDF文件并在网页上进行预览的需求。Flask作为一个轻量级的Python Web框架,可以很好地实现这个功能。本文将详细介绍如何使用Flask生成和预览PDF文件。

准备工作

在开始之前,我们需要安装相关的库。首先确保已安装Flask和Werkzeug,然后通过pip安装pdfkit和wkhtmltopdf。

pip install Flask
pip install pdfkit
pip install wkhtmltopdf
Python

pdfkit是一个Python库,用于将HTML内容转换为PDF文件。而wkhtmltopdf是一个命令行工具,用于将HTML文件转换为PDF。pdfkit内部调用wkhtmltopdf来实现PDF文件的生成。

生成PDF文件

首先,我们需要创建一个Flask应用,并编写一个路由用于生成PDF文件。创建一个名为app.py的文件,编写如下内容:

from flask import Flask, render_template, make_response
import pdfkit

app = Flask(__name__)

@app.route('/')
def index():
    html = render_template('index.html')
    pdf = pdfkit.from_string(html, False)

    response = make_response(pdf)
    response.headers['Content-Type'] = 'application/pdf'
    response.headers['Content-Disposition'] = 'inline; filename=output.pdf'

    return response

if __name__ == '__main__':
    app.run()
Python

在上面的代码中,我们定义了一个index路由,该路由会渲染名为index.html的模板,并将其转换为PDF文件。最后返回生成的PDF文件。

接下来,我们需要创建一个名为templates的文件夹,并在里面创建一个名为index.html的模板文件。在index.html文件中编写需要转换为PDF的HTML内容。例如:

<!DOCTYPE html>
<html>
<head>
    <title>PDF Preview</title>
</head>
<body>
    <h1>PDF Preview</h1>
    <p>This is a sample PDF preview.</p>
</body>
</html>
HTML

预览PDF文件

现在我们已经实现了生成PDF文件的功能,接下来就是如何在网页上进行预览。为了实现预览功能,我们可以借助pdf.js这个开源库。

首先,在index.html文件中引入pdf.js的相关文件:

<!DOCTYPE html>
<html>
<head>
    <title>PDF Preview</title>
    <script src="https://mozilla.github.io/pdf.js/build/pdf.js"></script>
</head>
<body>
    <h1>PDF Preview</h1>
    <p>This is a sample PDF preview.</p>
    <div>
        <canvas id="pdfCanvas"></canvas>
    </div>
    <script>
        const pdfUrl = '/';  // PDF文件的URL

        // 创建PDFJS对象
        const pdfjsLib = window['pdfjs-dist/build/pdf'];
        pdfjsLib.GlobalWorkerOptions.workerSrc = 'https://mozilla.github.io/pdf.js/build/pdf.worker.js';

        // 渲染PDF文件
        const renderPDF = async () => {
            const pdf = await pdfjsLib.getDocument(pdfUrl).promise;
            const page = await pdf.getPage(1);
            const canvas = document.getElementById('pdfCanvas');
            const viewport = page.getViewport({ scale: 1 });
            canvas.height = viewport.height;
            canvas.width = viewport.width;
            const renderContext = {
                canvasContext: canvas.getContext('2d'),
                viewport: viewport
            };
            await page.render(renderContext).promise;
        };

        renderPDF();
    </script>
</body>
</html>
HTML

在上面的代码中,我们引入了pdf.js的相关文件,并通过创建PDFJS对象和渲染PDF文件的操作来实现PDF文件的预览功能。

运行应用

现在我们已经准备就绪,可以运行Flask应用来生成和预览PDF文件。在命令行中执行以下命令:

python app.py
Python

然后打开浏览器访问http://127.0.0.1:5000/,就可以看到生成的PDF文件在网页上进行预览了。

通过本文的介绍,我们学习了如何使用Flask生成和预览PDF文件,同时也了解了如何借助pdf.js进行PDF文件的预览。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册