在flask中使用pdfkit生成pdf - 重新加载页面错误

问题描述

我正在尝试使用 Flask 将 HTML 转换为 pdf。

我可以使用以下软件包。

  • pdfkit
  • wkhtmltopdf

当我运行服务器时,它无法加载到浏览器中,甚至主页也无法加载到浏览器中。我不明白这有什么问题。

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>

route.py 代码

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)

@app.route('/leave_worker_pdf')
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

Browser screenshot

解决方法

改变

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

@app.route('/leave_worker_pdf')
def leave_worker_pdf():
    leave_worker = LeaveWorker.query.all()
    html = render_template(
        "leave_worker_pdf.html",False)
    response = make_response(pdf)
    response.headers["Content-Type"] = "application/pdf"
    response.headers["Content-Disposition"] = "inline; filename=output.pdf"
    return response

这假设您使用的是 app 而不是蓝图