선풍기*_*선풍기 4 html python pdf django weasyprint
我正在尝试使用Weasyprint库在Django上输出PDF,但是图像不会出现在生成的PDF上。我已经尝试了图像的相对URL和静态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
Run Code Online (Sandbox Code Playgroud)
这是图像HTML的一部分:
<DIV id="p1dimg1">
<IMG src="{% static 'img/image.jpg' %}" alt="">
</DIV>
Run Code Online (Sandbox Code Playgroud)
和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;}
Run Code Online (Sandbox Code Playgroud)
非常感谢你
선풍기*_*선풍기 13
固定于:
添加, base_url=request.build_absolute_uri()
这样
html = HTML(string=html_string)
Run Code Online (Sandbox Code Playgroud)
变成
html = HTML(string=html_string, base_url=request.build_absolute_uri())
Run Code Online (Sandbox Code Playgroud)
这将允许在HTML文件中使用相对URL。
对于图像,由于某些原因,似乎只有PNG图像起作用。
为了使HTML样式显示在PDF上,请按照Weasyprint文档添加presentational_hints = True:
pdf = html.write_pdf(stylesheets=[CSS(settings.STATIC_ROOT + '/css/detail_pdf_gen.css')], presentational_hints=True);
Run Code Online (Sandbox Code Playgroud)
添加HTML(string=html_string, base_url=request.build_absolute_uri())
到我的配置后,图像仍然无法加载。必须使用下面的日志记录来识别真正的问题。
import logging
logger = logging.getLogger('weasyprint')
logger.addHandler(logging.FileHandler('/tmp/weasyprint.log'))
Run Code Online (Sandbox Code Playgroud)
然后检查/tmp/weasyprint.log
日志文件是否有错误。
对我来说真正的问题是:
urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate
Run Code Online (Sandbox Code Playgroud)
修复方法是禁用 ssl 验证:
urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate
Run Code Online (Sandbox Code Playgroud)
将图像路径的静态设置为:
{% load static %}
<img src="{% static 'images/your_image.png %}" alt="" />
Run Code Online (Sandbox Code Playgroud)
然后你必须在 Weasyprint 的 HTML 类中传递 base_url 为:
HTML(string=html_string, base_url=request.build_absolute_uri())
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5962 次 |
最近记录: |