Недопустимая ошибка изображения при использовании dataUrl в pdfmake

Я использую pdfmake для создания PDF-документа в угловом приложении и просто пытаюсь добавить изображение к выводу, используя dataURL (следуя документам pdfmake.

        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 действителен (я проверял его в своем браузере). Что-то еще мне не хватает?

Благодарю.

3 ответа

Решение

Хорошо, я исправляю это до ошибки ID-10-T. Моя строка с URL в кодировке base64 работает нормально. Я нашел еще одну строку в моем объекте определения документа, где я не ссылался на изображение должным образом, и эта ошибка выдает ошибку.

вы можете попробовать вот так. и он будет работать нормально. Не забудьте проголосовать

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

`

Я заметил эту ошибку в среде React.

Проблема, похоже, заключается в мутации объекта arguments, который передается в createPdf.

Я исправил это, убедившись, что то, что передается в createPdf, является «чистым» и больше не имеет ссылок на поступающие данные. Это мой код:

            useEffect(() => {

        const iframe = iframeRef.current;
            
        pdfMake
        .createPdf({
            content: JSON.parse(JSON.stringify(content))
        })
        .getBase64((encodedString) => {
            iframeRef.current.src = `data:application/pdf;base64,${encodedString}`;
        })

        return () => iframe.src = 'about:blank';

      }, [content]);

Другие вопросы по тегам