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

生产环境使用pdfkit Python生成PDF后下载图片模糊问题

解决PDFKit转换HTML为PDF后图片模糊的问题

我之前也碰到过类似的情况,用pdfkit生成PDF时图片模糊,大多和渲染分辨率、图片加载方式或者HTML里的尺寸设置有关。结合你的代码,给你几个可行的解决方案:

1. 提升PDFKit的渲染分辨率

PDFKit默认的图片渲染分辨率偏低(通常是96dpi),这是导致图片模糊的核心原因。你可以在配置选项里添加高分辨率相关参数:

options = {
    'page-size': 'A4',
    'margin-top': '0.75in',
    'margin-right': '0.75in',
    'margin-bottom': '0.75in',
    'margin-left': '0.75in',
    'image-dpi': '300',  # 强制用300dpi(打印级分辨率)渲染图片
    'zoom': 1.5  # 提升整体页面渲染缩放比例,强化细节清晰度
}

image-dpi会让PDFKit以更高的精度处理图片,zoom则放大整个HTML的渲染尺寸,能同时改善文字和图片的清晰度。

2. 优化HTML模板中的图片处理

你的HTML里给图片设置了固定的height:160px; width:160px,如果原始图片分辨率远高于这个尺寸,PDFKit在渲染时可能会压缩图片导致模糊。可以做这些调整:

  • 确保context['user_info']['photo']指向的是高分辨率原始图片,不要使用经过压缩的缩略图
  • 修改img标签样式,保留图片原始比例,避免强制压缩:
<img src="{{ context['user_info']['photo'] }}" 
     style="height: 160px; width: 160px; object-fit: cover; image-rendering: crisp-edges;" 
     alt="Tutor Photo">

object-fit: cover保证图片按比例填充容器,image-rendering: crisp-edges让图片边缘更锐利,减少模糊感。

另外要确认图片URL是绝对路径(比如https://your-domain.com/photos/xxx.jpg),如果是相对路径,PDFKit可能无法正确加载原始高清图,只能用低清版本渲染。

3. 优化后端PDF生成与编码逻辑

你当前先保存PDF到文件再读取编码的方式,可能会有不必要的损耗,而且str(encode_string).split("'")[1]的字符串处理不够健壮。可以改成直接生成字节流再编码:

# 直接生成PDF字节流,跳过文件保存步骤
pdf_bytes = pdfkit.from_string(html, output_path=False, options=options)
# 正确解码base64字符串
encode_string = base64.b64encode(pdf_bytes)
data = encode_string.decode('utf-8')

这样代码更简洁,还避免了文件读写可能带来的问题,同时确保base64编码的正确性。

4. 验证前端base64处理

你的前端代码看起来没问题,但可以检查后端返回的base64字符串是否完整:比如在前端打印cb的值,确认开头没有多余字符、结尾是正确的填充符=,避免编码截断导致的PDF损坏或模糊。

按照这些步骤调整后,生成的PDF图片清晰度应该会有明显提升。

内容的提问来源于stack exchange,提问作者Md Morshed Alam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:05:52