使用 Weasyprint 的 PDF 输出不显示图像(Django)

新手上路,请多包涵

我正在尝试使用 Weasyprint 库在 Django 上输出 PDF,但图像不会出现在生成的 PDF 上。我已经为图像尝试了相对和静态 URL,但即使是静态 URL 也不显示图像。在 chrome 上打开 HTML 本身时,图像会显示。

这是我在 views.py 文件中生成的 pdf 视图:

 def pdf_generation(request, some_slug)
    stud = Student.objects.get(some_slug=some_slug)
    studid = stud.some_slug
    context = {'studid':studid}
    html_string = render_to_string('templates/pdf_gen.html', context)
    html = HTML(string=html_string)
    pdf = html.write_pdf(stylesheets=[CSS(settings.STATIC_ROOT +  '/css/detail_pdf_gen.css')]);
    response = HttpResponse(pdf, content_type='application/pdf')
    response['Content-Disposition'] = 'inline; filename="mypdf.pdf"'
    return response

这是图像的 HTML 部分:

 <DIV id="p1dimg1">
<IMG src="{% static 'img/image.jpg' %}" alt="">
</DIV>

和CSS:

 #page_1 #p1dimg1 {position:absolute;top:0px;left:0px;z-
index:-1;width:792px;height:1111px;}
#page_1 #p1dimg1 #p1img1 {width:792px;height:1111px;}

非常感谢你

原文由 선풍기 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

修正者:

添加 base_url=request.build_absolute_uri() 这样

html = HTML(string=html_string)

成为

html = HTML(string=html_string, base_url=request.build_absolute_uri())

这将允许在 HTML 文件中使用相对 URL。

对于图像,出于某种原因似乎只有 PNG 图像有效。

对于要在 PDF 上显示的 HTML 样式,请根据 Weasyprint 文档添加 presentational_hints=True:

     pdf = html.write_pdf(stylesheets=[CSS(settings.STATIC_ROOT +  '/css/detail_pdf_gen.css')], presentational_hints=True);

原文由 선풍기 发布,翻译遵循 CC BY-SA 3.0 许可协议

将图像路径设置为静态:

 {% load static %}
<img src="{% static 'images/your_image.png %}" alt="" />

然后你必须在 Weasyprint 的 HTML 类中传递 base_url 作为:

 HTML(string=html_string, base_url=request.build_absolute_uri())

原文由 Abdul Rehman 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏