xhtml2pdf-在Django中加载静态CSS文件和图像



如何在Django中使用xhtml2pdf,使用css样式表和引导程序样式,从HTML文件创建PDF文档?

xhtml2pdf文档描述了通过link_callback函数添加样式表/图像。

我尝试了以下方法:

1:我把";在Django中使用xhtml 2pdf";从文档到我的项目的代码:https://xhtml2pdf.readthedocs.io/en/latest/usage.html#using-django 中的xhtml 2pdf

2:创建了一个html模板。在html模板中,我使用{% load static %}标签和<link rel="stylesheet" href="{% static 'subs_app/css/main.min.css' %}">

我得到以下错误:

可疑文件操作,位于/voice/pdf/1加入的路径(C:\static\subs_app\css\main.min.css(位于底座外部路径组件(C:\Users\office\dev\subs\subs_project\static(

3:我还尝试放弃{% load static %}方法,通过相对路径直接链接到样式表,但这也不起作用。

在使用xthml2pdf文档中描述的示例时,我遇到了一个类似的问题。然后我发现了这个问题,并发现作者没有像示例代码中那样使用Django的静态查找器。因此,我还删除了finder,并将link_callback函数更改为:

def link_callback(uri, rel):
"""
Convert HTML URIs to absolute system paths so xhtml2pdf can access those
resources
"""
import os
from django.conf import settings
static_url = settings.STATIC_URL       # Typically /static/
static_root = settings.STATIC_ROOT     # Typically /home/userX/project_static/
media_url = settings.MEDIA_URL         # Typically /media/
media_root = settings.MEDIA_ROOT       # Typically /home/userX/project_static/media/
base_dir = settings.BASE_DIR           # Project's base directory
if uri.startswith(media_url):
path = os.path.join(media_root, uri.replace(media_url, ""))
elif uri.startswith(static_url):
path = os.path.join(static_root, uri.replace(static_url, ""))
else:
return os.path.join(base_dir, '../', uri)
# make sure that file exists
if not os.path.isfile(path):
raise Exception(
'media URI must start with %s or %s' % (static_url, media_url)
)
return path

目前我在布局上仍然有问题,但至少CSS被发现有SuspiciousFileOperation错误。

最新更新