【问题标题】:Invalid image error using dataUrl in pdfmake在pdfmake中使用dataUrl出现无效图像错误
【发布时间】:2017-09-07 06:43:51
【问题描述】:

我正在使用 pdfmake 在 Angular 应用程序中生成 PDF 文档,并且只是尝试使用 dataURL 将图像添加到输出中(遵循pdfmake docs

        var docDefinition = {
          content: [
            {
              table: {
                widths: ['*'],
                body: [
                  [{text: 'Table text goes here', style: 'tableCellPadded'}]
                ]
              },
            },
            {
              image: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJgAAACHCAYAAADqQ...AABJRU5ErkJggg==",
              width: 152
            }
            '...various other text lines go here...'
          ],
          styles: {
            header: {
              bold: true,
              fontSize: 14
            },
            tableCellPadded: {
              margin: [0, 15, 0, 15],
              bold: true,
              fontSize: 14
            },
            note: {
              fontSize: 16,
              bold: true,
              italics: true
            }
          }
        };

但是,当我尝试打印文档时,我在控制台中收到此错误:

图像无效,图像字典应包含 dataURL 条目(或 node.js 中的本地文件路径)

据我所知,我在文档定义对象中正确输入了项目,并且我的 dataURL 是有效的(我已经在浏览器中对其进行了测试)。我还缺少什么吗?

谢谢。

【问题讨论】:

  • 缺少报价?。
  • 我想过,但我确实仔细检查了。
  • 我的意思是你在这里错过了一个报价:image: data:image/png;b.. 它应该是image: "data:image/png;...."
  • 如果不进行base64编码,只传递文件路径/名称,会得到什么结果?
  • @floor 无论我尝试哪条路径,我都会遇到同样的错误。

标签: javascript angularjs image pdfmake


【解决方案1】:

好的,我将此归结为 ID-10-T 错误。我使用 base64 编码 URL 的行运行良好。我在 doc 定义对象的更下方发现了另一行,我没有正确引用图像,并且该行抛出了错误。

【讨论】:

    【解决方案2】:

    你可以这样试试。它会正常工作。不要忘记投票

    getBase64ImageFromURL(url) {
      return new Promise((resolve, reject) => {
        var img = new Image();
        img.setAttribute("crossOrigin", "anonymous");
    
        img.onload = () => {
          var canvas = document.createElement("canvas");
          canvas.width = img.width;
          canvas.height = img.height;
    
          var ctx = canvas.getContext("2d");
          ctx.drawImage(img, 0, 0);
    
          var dataURL = canvas.toDataURL("image/png");
    
          resolve(dataURL);
        };
    
        img.onerror = error => {
          reject(error);
        };
    
        img.src = url;
      });
    }
    
    async createPdf() {
      var docDefinition = {
        content: [
          {
            image: await this.getBase64ImageFromURL("../../assets/ribbonLogo1.png")
           },
    

    【讨论】:

    • 欢迎来到stackoverflow。最好简要解释一下代码是如何解决问题的。
    猜你喜欢
    • 1970-01-01
    • 2013-06-19
    • 1970-01-01
    • 1970-01-01
    • 2015-06-09
    • 2014-11-12
    • 2013-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多