You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WeasyPrint在Ubuntu系统中通过Python代码生成PDF时图片不显示

问题分析与解决办法

核心原因:HTML字符串转义错误

你代码中的html_string使用了HTML实体转义(&lt;、&quot;),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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 03:33:21