Как я могу вставить изображение в PDF, не сохраняя ни в файл? - PullRequest
0 голосов
/ 13 декабря 2018

Я использую pdfMake , чтобы создать PDF и использовать его в качестве вложения электронной почты.Сейчас я только пытаюсь создать QR-код и поместить его во вновь созданный PDF-файл.

Я использую qr-image для генерации QR-кода.

Вот что у меня есть для создания pdf (используя SendGrid v3 api для доставки почты).

const docDefinition = {
    pageSize: 'A4',
    pageMargins: [40, 60, 40, 60],
    content: [
        'First paragraph',
        'Another paragraph, this time a little bit longer to make sure, this line will be divided into at least two lines',
        {
            image: qr.image(object.uid),
            width: 400
        },
    ]
};

let pdf;
pdfMake.createPdf(docDefinition).getBase64(function (encodedString) {
    pdf = encodedString;
    ...
    'attachments': [{
        'filename': 'attachment.pdf',
        'type': 'application/pdf',
        'content': pdf
    }],
    ...
}

Ошибка, которую я получаю при ответе:

Error getting event document:  invalid image, images dictionary should contain dataURL entries (or local file paths in node.js)

Если я удаляю свойство изображения и просто отправляю образец текста, все работает.Итак, я знаю, что PDF генерируется, я просто неправильно настраиваю изображение QR.

Я не хочу сохранять изображение, если это возможно - я хочу создать, прикрепить и отправить.

Любые предложения приветствуются!

1 Ответ

0 голосов
/ 13 декабря 2018

В надежде, что это поможет кому-то еще, вот то, что я придумал, это работает.

const qr_svg = qr.imageSync(object.uid, { type: 'png' });
const qr_str = 'data:image/png;base64,' + qr_svg.toString('base64');

const docDefinition = {
    pageSize: 'A4',
    pageMargins: [40, 60, 40, 60],
    content: [
        'First paragraph',
        'Another paragraph, this time a little bit longer to make sure, this line will be divided into at least two lines',
        {
            image: qr_str,
            width: 400
        },
    ]
};

На самом деле я неправильно передавал изображение в pdf.Весь кредит идет на Тим Кринс

...