使用flask将html表格转换为pdf

问题描述

我尝试使用 pdfkit 解决以下问题。

当我将 wkhtmltopdf 配置添加到我的应用程序时,即使索引页无法加载到浏览器中,我的应用程序也无法加载到浏览器中。但是当我从我的应用程序中删除 wkhtmltopdf 配置时,我的所有路由都可以正常工作,只有 HTML 到 pdf 的路由给了我以下错误

OSError: No wkhtmltopdf executable found: "b''"
If this file exists please check that this process can read it. Otherwise please install wkhtmltopdf - https://github.com/JazzCore/python-pdfkit/wiki/Installing-wkhtmltopdf

配置:

config = pdfkit.configuration(wkhtmltopdf='C:\\Program Files\\wkhtmltopdf\\bin\\wkhtmltopdf.exe')
pdfkit.from_url('http://127.0.0.1:5000/leave_worker_pdf','output.pdf',configuration=config)

route.py 代码

@app.route('/leave_worker_pdf',methods=['POST'])
def leave_worker_pdf():
    leave_worker = LeaveWorker.query.all()
    html = render_template("leave_worker_pdf.html",leave_worker=leave_worker)
    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

HTML 标记

<!DOCTYPE html>
<html lang="en">
<head>
  <Meta charset="UTF-8">
  <Meta http-equiv="X-UA-Compatible" content="IE=edge">
  <Meta name="viewport" content="width=device-width,initial-scale=1.0">
  <title></title>
</head>
<body>
  <div class="container">

  
    <h1 class="text-center mt-4">Leave Workers Details</h1>
  
    <table class="table mt-4">
        <thead class="table-dark">
          <tr>
            <th scope="col">Id</th>
            <th scope="col">Name</th>
            <th scope="col">Address</th>
            <th scope="col">Contact</th>
            <th scope="col">LeaveDate</th>
            <th scope="col">Admin</th>
          </tr>
        </thead>
        {% for worker in leave_worker %}
        <tbody>
          <tr>
            <td> {{ worker.id }}</td>
            <td> {{ worker.leave_worker_name }} </td>
            <td> {{ worker.leave_worker_address }} </td>
            <td> {{ worker.leave_worker_contact }} </td>
            <td> {{ worker.leave_date.strftime('%Y-%m-%d') }} </td>
            <td> {{ worker.admin.username }} </td>
          </tr>
        </tbody>
        {% endfor %}
    </table>
  
  </div>
</body>
</html>

当我添加 wkhtmltopdf 配置时,页面无法加载到浏览器中。

When I add wkhtmltopdf configuration the page can't load into the browser

即使是主页也无法加载到浏览器中。

index page

当我从我的应用程序中删除 wkhtmltopdf 配置时,只有当我点击 pdf 时,我的所有路由才能正常工作,然后它给出错误

enter image description here

错误

enter image description here

解决方法

如果您在远程服务器上运行此 Flask 应用程序,则设置 wkhtmltopdf 可能会遇到困难。我无法这样做,不得不求助于使用 python 库 reportlab 来创建此解决方案。

如果您有兴趣将其作为解决方案,这里有一个 git repo 代码,来自写过一本关于 reportlab 的书的人。

https://github.com/driscollis/reportlabbookcode