django xhtml2pdf 没有得到图像

django xhtml2pdf not getting image

我正在尝试将 html 渲染为 pdf,它真的很棒!只有一个问题,那就是模板获取图像:

我正在使用 python xhtml2pdf 库进行 pdf 渲染

这是我渲染 pdf 的方法:

def render_pdf(template_src, context_dict):
    template = get_template(template_src)
    html  = template.render(context_dict)
    result = BytesIO()
    pdf = pisa.pisaDocument(BytesIO(html.encode("utf-8")), result)
    if not pdf.err:
        return HttpResponse(result.getvalue(), content_type='application/pdf')
    return HttpResponse('Unable to process the request, We had some errors<pre>%s</pre>' % escape(html))

下面是我的views.py

def test_view(request):
    context = {
        'test': 'a test string'
    }
    return render_pdf('test.html', context)

这是我的 test.html

{% load static %}
<p>hello test </p>
 <img src="{% static 'ok.jpg' %}">

如果我使用 django 默认 render 方法渲染它会获取图像但是当我渲染 pdf 时图像不会获取。

我听说过使用 link_callback 方法和此文档的解决方案:https://xhtml2pdf.readthedocs.io/en/latest/usage.html

我不知道在哪里包含这个或者我怎样才能实现这个。

谁能帮我解决这个问题?

我建议修改你的html模板,使用图片文件的绝对/相对路径(你硬盘中的目录路径),而不是使用{% static %}标签。静态标签仅适用于渲染 HTMl,但 pisa 无法从中读取图像。

我从一个从 html 生成 PDF 的项目中获得了这段代码,我的图像是这样完成的:

<img src="{{ STATIC_ROOT }}/report/logo.png" >

其中 STATIC_ROOT 是从渲染上下文传递的变量。

如果它仍然相关,这对我有用。

我的静态文件夹在我的根目录中。

{% 负载静态 %}