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

使用jsPDF结合domtoimage生成PDF时出现灰色条纹如何解决

问题:Angular组件转PDF出现莫名灰色条纹如何去除?

我需要将Angular组件视图生成PDF文件,使用domtoimage将组件渲染为PNG图片,再通过jsPDF将生成的图片添加到PDF中。但生成的PDF中出现了原组件不存在的灰色条纹(文本半隐藏是应用的特效,并非bug),请问如何去除这些条纹?

以下是我的PDF生成代码:

openPDF(): void {
    this.generatingPDF = true;
    const DATA = this.textContainerRef.nativeElement!;

    domtoimage
      .toPng(DATA)
      .then((png) => {
        const w = DATA.clientWidth;
        const h = DATA.clientHeight;
        const hpng = (h / w) * 190;
        const doc = new jsPDF('p', 'mm', 'a4');
        try {
          let name = 'untitled_text';
          if (this.text?.title) {
            name = this.text.title;
          }
          doc.addImage(png, 'png', 10, 10, 190, hpng, 'SLOW').save(name);
          this.generatingPDF = false;
          this._cdr.markForCheck();
        } catch (e) {
          this.generatingPDF = false;
          this._cdr.markForCheck();
        }
      })
      .catch((err) => console.log(err));
}
解决方案
  • 强制设置渲染背景色与精度:domtoimage对透明区域的渲染容易出现异常,添加bgcolor和quality参数,固定背景为白色并拉满渲染精度:
    domtoimage.toPng(DATA, {
      quality: 1,
      bgcolor: '#ffffff'
    })
    
  • 临时移除组件缩放样式:如果组件内使用了transform: scale()等CSS缩放属性,domtoimage渲染时会产生条纹。生成PNG前临时移除缩放,完成后恢复:
    // 保存原缩放样式
    const originalTransform = DATA.style.transform;
    // 临时取消缩放
    DATA.style.transform = 'none';
    
    domtoimage.toPng(DATA)
      .then((png) => {
        // 恢复原样式
        DATA.style.transform = originalTransform;
        // 后续PDF生成逻辑保持不变
      })
    
  • 改用Canvas渲染后转PNG:先将组件渲染为Canvas再转成PNG,能提升渲染稳定性,减少条纹问题:
    domtoimage.toCanvas(DATA, { quality: 1 })
      .then((canvas) => {
        const png = canvas.toDataURL('image/png');
        // 后续PDF生成逻辑不变
      })
    
  • 调整jsPDF图片添加参数:移除'SLOW'参数,避免压缩算法导致的异常条纹:
    doc.addImage(png, 'png', 10, 10, 190, hpng);
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 22:57:23