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

使用JavaScript(kendo库)将HTML导出为PDF时图片无法正常显示问题

导出PDF图片缺失的核心原因

  • 跨域资源限制:Kendo PDF导出功能默认无法处理跨域图片,你代码中引用的外部域名图片如果未配置CORS允许当前域名访问,导出时会直接被拦截。
  • 图片未完成加载就触发导出:点击导出按钮时如果图片还未加载完毕,drawDOM方法会直接跳过未完成加载的资源。
  • 组件写法不匹配:代码中的<kendo-pdf-export>是Kendo UI for Angular的专属组件写法,如果你使用的是纯jQuery版Kendo,该标签不会被识别,内部的图片自然不会被纳入导出范围。
  • 动态路径未生效:代码里{{url + '.jpg'}}是模板变量,导出前如果变量未被替换为真实有效的图片地址,也会导致图片加载失败。

解决方法

  1. 优先处理跨域问题:最稳妥的方案是把所有需要导出的图片转成base64编码,直接嵌入img的src属性,完全规避跨域限制。如果不方便转base64,就给图片所在的服务器配置CORS规则,允许当前页面域名访问图片资源。
  2. 调整导出逻辑,等待所有图片加载完成后再执行导出,修改getPDF函数代码如下:
function getPDF(selector) {
  const allImgs = $(selector).find('img');
  let loadedCount = 0;
  const totalImgs = allImgs.length;

  allImgs.each(function() {
    if (this.complete) {
      loadedCount++;
      checkAllLoaded();
    } else {
      $(this).on('load error', function() {
        loadedCount++;
        checkAllLoaded();
      });
    }
  });

  function checkAllLoaded() {
    if (loadedCount === totalImgs) {
      kendo.drawing.drawDOM($(selector)).then(function(group){
        kendo.drawing.pdf.saveAs(group, "Invoice.pdf");
      });
    }
  }
}
  1. 修正组件写法:如果使用的是jQuery版Kendo,直接删除<kendo-pdf-export>标签,保留内部的img标签即可。
  2. 确保动态图片路径生效:导出前确认{{url + '.jpg'}}这类模板变量已经被替换为真实可访问的图片地址,不存在404问题。

内容的提问来源于stack exchange,提问作者Vishal Vishwakarma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 08:48:01