Как создать PDF с Puppeteer в среде узла, не записывая его на диск - PullRequest
0 голосов
/ 02 июня 2018

Справочная информация

Я работаю в экспресс-приложении node.js, где нам необходимо создать PDF-файлы.В настоящее время мы используем Puppeteer от Google, что делает это простым.В документации показано, как это сделать, путем передачи пути к объекту, который сообщает Puppeteer, куда писать PDF.

Проблема

Я бы предпочел не записывать этот PDF-файл на диск.Цель в том, чтобы клиент достиг конечной точки, где PDF-файл будет сгенерирован и возвращен клиенту.Создание файла в течение 2 секунд добавляет крошечное состояние, из-за которого мне приходится сталкиваться с гораздо большими головными болями для развертывания в рабочей среде.

Пример

(async () => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.goto(
      'https://example.com/',
    );
    await page.pdf({
      path: filePath,
      format: 'A4',
      margin: {
        top: '20px',
        left: '20px',
        right: '20px',
        bottom: '20px',
      },
    });
    await browser.close();

Вопрос

В этом примере кода я создаю PDF и сохраняю его на диск,Как я могу создать этот PDF, но вместо того, чтобы записать его на диск, немедленно вернуть его клиенту в ответе?

1 Ответ

0 голосов
/ 02 июня 2018

Странно У меня тоже такое же требование.

Проблема сама по себе относительно проста.Все, что вам нужно сделать, это удалить атрибут пути и подождать, пока page.pdf завершит свою задачу, он вернет байтовый массив, просто отправив его в ответ.

Вы можете найти документацию для page.pdf(options):

async generatePdf(url) {
   await page.goto(url, {waitUntil: 10000});
   const buffer = await page.pdf({
      format: 'A4'
   });
   return buffer;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...