Puppeteer PDF преобразование из URL несовместимо - PullRequest
0 голосов
/ 16 января 2020

Я развернул Puppeteer в AWS Lambda для генерации PDF-файлов из URL-адресов.

Результаты противоречивы, иногда PDF-файлы генерируются, как ожидалось, иногда просто возвращаются пустые PDF-файлы.

Есть идеи о том, что может быть причиной?

Из внешнего интерфейса я передаю URL, ширину и высоту веб-страницы. Я убедился, что значения ширины и высоты не являются правильными.

Лямбда-код:

const chromium = require('chrome-aws-lambda');
var uuidv1 = require('uuid/v4');
var fs = require('fs');


exports.handler = async (event, context, callback) => {

var body = JSON.parse(JSON.stringify(event));

let result = null;
let browser = null;

context.callbackWaitsForEmptyEventLoop = false;

  try
   {

     var url = body.downloadUrl;
     var elementHeight = body.elementHeight;
     var elementWidth = body.elementWidth;


     console.log('Loaded POST Request');

      browser = await chromium.puppeteer.launch({
        args: chromium.args,
        executablePath: await chromium.executablePath,
        headless: true,
      });

      console.log('Browser Launched');


      let page = await browser.newPage();

      console.log('New Page Launched');

      await page.goto(url); // Adjust network idle as required.

      await page.setViewport({
        width: 1600,
        height: 1,
        deviceScaleFactor: 1
      });


      await page.goto(url, {
        waitUntil:['domcontentloaded', 'networkidle0', 'load']
      });


      await page.waitFor(5000);

      console.log('5 milliseconds Timeout done');

      await page.addStyleTag({content: '@page { size:' + elementWidth + 'px ' + elementHeight +'px; margin: 25px }'})

      console.log('added styles', elementWidth, elementHeight);

      const pdfConfig = {
        path: '/tmp/report.pdf',
        printBackground: true,
        scale: 1,
        pageRanges : '1-1',
        margin: {
          top: 100,
          bottom: 100,
          left: 100,
          right: 0
        },
        preferCSSPageSize: true
      };

      await page.emulateMedia('screen');

      console.log('Emulate Success');

      const pdf = await page.pdf(pdfConfig);

      console.log('Successfully Generated PDF');

      await browser.close();

      var uploadStatus = await uploadFileToS3('/tmp/report.pdf');

      console.log('upload Successfull');

   }
   catch (e) {
     console.log('error', e);

     callback(null, {
          statusCode: 500,
          message: 'error',
          body: e
      });

   }

};
...