pdfkit 不加载 css 和 JavaScript
pdfkit does not load css and JavaScript
我目前正在使用 Flask
构建 Web 应用程序。我的主管要求一个功能应该是将当前页面保存为 PDF(用于打印)。为此,我使用 pdfkit
。在有人提议改用 weasyprint
之前:我尝试安装它 2 小时无济于事,所以我放弃了。我正在使用 Bootstrap
css 及其 JavaScript 来使应用程序看起来更令人愉悦。
我正在使用下面的文件结构(正如 Flask
的教程所建议的那样)
+-- name_of_app
| +-- static
| +-- css
| +-- css files
| +-- js
| +-- javascript files
| +-- templates
| +-- .html templates
| +-- __init__.py
| +-- config.py
| +-- forms.py
| +-- views.py
+-- run.py
为了尝试 pdfkit
,我每次生成页面时都会生成 PDF,即在 views.py
中路由的所有函数中。所有页面均基于以下模板
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link href="static\css\bootstrap.css" rel="stylesheet" media="screen">
<link href="static\css\bootstrap-theme.css" rel="stylesheet">
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script src="static\js\bootstrap.js"></script>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
{% if title %}
<title>{{ title }} - Timeseries Project</title>
{% else %}
<title>Welcome to the Timeseries Project</title>
{% endif %}
</head>
<body>
<div class="navbar navbar-default">
<div class="navbar-inner">
<a class="navbar-brand active" href="/">Home</a>
<a class="navbar-brand" href="/">Save as PDF</a>
</div>
</div>
{% block content %}{% endblock %}
</body>
</html>
网页使用提供的 css 和 JS 文件加载得很漂亮。但是,pdfkit
输出以下警告
Warning: Failed to load file:///C:/Users/my_user/AppData/Local/Temp/static/css/bootstrap.css (ignore)
Warning: Failed to load file:///C:/Users/my_user/AppData/Local/Temp/static/css/bootstrap-theme.css (ignore)
Warning: Failed to load file:///C:/Users/my_user/AppData/Local/Temp/static/js/bootstrap.js (ignore)
因此,我要解决的问题是:如何让 pdfkit
在执行其中一种方法的文件夹中查找 static
(即 views.py
), 而不是 AppData
?
要为静态文件生成 URL,请使用特殊的 'static'
端点名称:http://flask.pocoo.org/docs/0.10/quickstart/#static-files
<link href="{{ url_for('static', filename='css/bootstrap.css') }}" rel="stylesheet" >
<link href="{{ url_for('static', filename='css/bootstrap-theme.css') }}" rel="stylesheet">
更新:
使用 _external=True
也可以通过提供绝对值 url 来解决问题。例如:
<link href="{{ url_for('static', filename='css/bootstrap.css', _external=True) }}" rel="stylesheet" >
通过在我的 jinja2
模板中包含完整路径,我能够使用 pdfkit
使其工作:
<link rel="stylesheet" href="file:///Users/paul/code/pdfmaker/templates/css/styles.css">
我目前正在使用 Flask
构建 Web 应用程序。我的主管要求一个功能应该是将当前页面保存为 PDF(用于打印)。为此,我使用 pdfkit
。在有人提议改用 weasyprint
之前:我尝试安装它 2 小时无济于事,所以我放弃了。我正在使用 Bootstrap
css 及其 JavaScript 来使应用程序看起来更令人愉悦。
我正在使用下面的文件结构(正如 Flask
的教程所建议的那样)
+-- name_of_app
| +-- static
| +-- css
| +-- css files
| +-- js
| +-- javascript files
| +-- templates
| +-- .html templates
| +-- __init__.py
| +-- config.py
| +-- forms.py
| +-- views.py
+-- run.py
为了尝试 pdfkit
,我每次生成页面时都会生成 PDF,即在 views.py
中路由的所有函数中。所有页面均基于以下模板
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link href="static\css\bootstrap.css" rel="stylesheet" media="screen">
<link href="static\css\bootstrap-theme.css" rel="stylesheet">
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script src="static\js\bootstrap.js"></script>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
{% if title %}
<title>{{ title }} - Timeseries Project</title>
{% else %}
<title>Welcome to the Timeseries Project</title>
{% endif %}
</head>
<body>
<div class="navbar navbar-default">
<div class="navbar-inner">
<a class="navbar-brand active" href="/">Home</a>
<a class="navbar-brand" href="/">Save as PDF</a>
</div>
</div>
{% block content %}{% endblock %}
</body>
</html>
网页使用提供的 css 和 JS 文件加载得很漂亮。但是,pdfkit
输出以下警告
Warning: Failed to load file:///C:/Users/my_user/AppData/Local/Temp/static/css/bootstrap.css (ignore)
Warning: Failed to load file:///C:/Users/my_user/AppData/Local/Temp/static/css/bootstrap-theme.css (ignore)
Warning: Failed to load file:///C:/Users/my_user/AppData/Local/Temp/static/js/bootstrap.js (ignore)
因此,我要解决的问题是:如何让 pdfkit
在执行其中一种方法的文件夹中查找 static
(即 views.py
), 而不是 AppData
?
要为静态文件生成 URL,请使用特殊的 'static'
端点名称:http://flask.pocoo.org/docs/0.10/quickstart/#static-files
<link href="{{ url_for('static', filename='css/bootstrap.css') }}" rel="stylesheet" >
<link href="{{ url_for('static', filename='css/bootstrap-theme.css') }}" rel="stylesheet">
更新:
使用 _external=True
也可以通过提供绝对值 url 来解决问题。例如:
<link href="{{ url_for('static', filename='css/bootstrap.css', _external=True) }}" rel="stylesheet" >
通过在我的 jinja2
模板中包含完整路径,我能够使用 pdfkit
使其工作:
<link rel="stylesheet" href="file:///Users/paul/code/pdfmaker/templates/css/styles.css">