WeasyPrint在Ubuntu系统中通过Python代码生成PDF时图片不显示
问题分析与解决办法
核心原因:HTML字符串转义错误
你代码中的html_string使用了HTML实体转义(<、"),WeasyPrint解析时会将这些转义字符当作普通文本处理,而不是解析为<img>标签,自然无法显示图片。
解决步骤
1. 修正HTML字符串格式
将转义后的实体替换为原始HTML标签,直接使用未转义的字符串:
html_string = '<img src="http://domain_name/static/assets/images/logo/logo.png" alt="Logo" /> <h1>images</h1>'
2. 验证base_url的正确性
如果仍需使用base_url,确保它指向正确的根域名(不带具体请求路径)。可以通过打印request.build_absolute_uri('/')确认值为http://domain_name/,避免因当前请求路径导致URL拼接错误:
base_url = request.build_absolute_uri('/') pdf = weasyprint.HTML(string=html_string, base_url=base_url).write_pdf(presentational_hints=True, stylesheets=[weasyprint.CSS(string='@page { size: letter; }')])
3. 检查Linux服务器的网络访问权限
在Linux服务器上执行以下命令,测试是否能正常获取图片:
curl -I http://domain_name/static/assets/images/logo/logo.png
如果返回非200状态码,说明服务器无法访问该图片URL,需排查:
- 防火墙/安全组是否允许出站访问该域名
- 服务器DNS解析是否正常
- 图片URL路径拼写是否正确
4. 核对WeasyPrint版本
确保Linux服务器上的WeasyPrint版本与Windows一致,不同版本可能存在URL处理差异。升级到最新版本:
pip install --upgrade weasyprint
5. 直接使用绝对URL(可选)
由于图片已经是绝对URL,可尝试移除base_url参数,直接让WeasyPrint解析图片的完整地址:
pdf = weasyprint.HTML(string=html_string).write_pdf(presentational_hints=True, stylesheets=[weasyprint.CSS(string='@page { size: letter; }')])
内容的提问来源于stack exchange,提问作者Habib Ur Rehman
相关产品推荐
相关产品推荐

