使用pdfmake中的dataUrl无效的图像错误

时间:2017-04-11 18:13:55

标签: javascript angularjs image pdfmake

我使用pdfmake在角度应用中生成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中的本地文件路径)

据我所知,我在doc定义对象中正确输入了该项,并且我的dataURL有效(我已经在浏览器中对其进行了测试)。还有其他我想念的东西吗?

感谢。

2 个答案:

答案 0 :(得分:0)

好的,我正在将这个问题归咎于ID-10-T错误。我使用base64编码的URL的行正常工作。我在我的doc定义对象中找到了另一条线,在那里我没有正确地引用图像,而且那个引发了错误。

答案 1 :(得分:0)

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

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")
       },