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

jsPDF生成MRI报告时addImage加载旧缓存图片问题咨询

问题结论

jsPDF 本身不存在针对图片资源的内置缓存机制,你遇到的始终加载旧图片的问题,是浏览器对同URL静态资源的默认缓存行为导致的,和jsPDF库本身逻辑无关。
当服务器上的图片文件被更新后,如果图片的访问URL没有任何变化,浏览器会直接复用本地缓存的首次请求获取的旧图片资源,不会重新向服务器拉取最新版本,最终导致addImage写入PDF的始终是旧图内容。

可落地解决方案
  • 快速修复方案:给图片URL拼接动态版本戳参数,强制浏览器判定为新资源、跳过本地缓存拉取最新文件,参考修改代码如下:
generateMRIReport(patientNumber){
    window.jsPDF = window.jspdf.jsPDF;
    const MRI_REPORT = new jsPDF();
    // 生成动态时间戳作为缓存清除标记
    const cacheBuster = Date.now();
    MRI_REPORT.addImage(`WEB-INF/media/testing_mods_${patientNumber}.png?t=${cacheBuster}`, 'PNG', 5, 80, 196, 70);
    MRI_REPORT.addImage(`WEB-INF/media/testing_preds.png_${patientNumber}.png?t=${cacheBuster}`, 'PNG', 5, 160, 196, 70);
    // 剩余2张MRI图片按相同规则拼接参数即可
    MRI_REPORT.save(`NEUROPH_${patientNumber}_MRI_REPORT.pdf`);
}

注:你提供的代码中第二张图片路径写为testing_preds.png_${patientNumber}.png,中间多了一处.png后缀,建议先核对实际存储的文件名,避免出现路径404错误。

  • 服务端配置方案:如果可控制静态资源服务的响应规则,可给WEB-INF/media/目录下的动态生成图片配置Cache-Control: no-cache响应头,要求浏览器每次访问该路径资源时必须和服务器校验版本,不会长期复用本地缓存。
  • 自定义预加载方案:如果需要更精准控制加载逻辑,可在调用addImage前通过fetch主动拉取图片,请求时配置cache: 'no-cache'参数,拿到图片Blob后转换为Image对象或base64格式再传入addImage,完全绕开浏览器默认静态资源缓存逻辑。

内容的提问来源于stack exchange,提问作者Hassan Mansour

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 16:48:17