Кукловод-PDF: Узел зависает, когда я пытаюсь сгенерировать PDF

#javascript #node.js #pdf #puppeteer

#javascript #node.js #PDF #кукловод

Вопрос:

Я использую Puppeteer для создания файла PDF. На моем ноутбуке (Windows 10) он работает очень хорошо, но на сервере (Windows Server 2012 R2) он зависает при попытке сгенерировать PDF и заканчивается ошибкой тайм-аута.

Здесь я устанавливаю переменные и вызываю функцию generatePdf()

 let html = '<html here....>';
pathPdf = 'c:pathfile.pdf'
    
const pdf=this.generatePdf();
    pdf.then(
        function (){
            res.status(200).send([{path: pathPdf}]);
        })
    .catch(
        function(val){
            res.status(500).send([val.message, val]);
    });
  

И функция, которая генерирует PDF с помощью Puppeteer:

 this.generatePdf = async function() {
    return new Promise(async function(resolve, reject) {
        try {
            const browser = await puppeteer.launch({
                headless: true
            });
            const page = await browser.newPage();
            page.setContent(html);
            //page.setDefaultNavigationTimeout(0)
            const buffer = await page.pdf({
                path: pathPdf,
                format: "A4",
                printBackground: true,
                displayHeaderFooter: true,
                footerTemplate: `
                <div style="font-size: 10px; padding-top: 5px; text-align: right; width: 100%; margin-right: 35px">
                <span>Page</span> <span class="pageNumber"></span> de <span class="totalPages"></span>
                </div>
                `,
                margin: {
                    bottom: 70, // minimum required for footer msg to display
                    left: 25,
                    right: 35,
                    top: 30,
                },
            });
            resolve();
            console.log('Bufffer', buffer);
            await browser.close();
            //res.end(buffer);
            console.log(buffer) // maybe do response(pdf).type('x-pdf')
        } catch (e) {
            console.log('Error', e);
            reject(e);
        }
    });
}
  

Комментарии:

1. У вас много вызовов await и async — на какой линии вы получаете тайм-аут? Первое, что приходит мне в голову — pathPdf это абсолютный URI, вы уверены, что на вашем сервере есть диск «C: » и у вас есть права на запись там (не точно у вас, но у пользователя, под которым запускается скрипт)? Попробуйте создать простой текстовый файл из скрипта на сервере, чтобы убедиться, что вы действительно можете создавать файлы.

2. @MarekPiotrowski Он зависает в следующей строке: const page = await browser.newPage(); Я без проблем создал другой файл с помощью fs по тому же пути

3. Попробуйте вот это: github.com/puppeteer/puppeteer/issues /…

4. @MarekPiotrowski Решение работает, но теперь HTML игнорирует некоторый код CSS

5. @MarekPiotrowski Я мог бы исправить проблему с CSS, проблема сейчас в том, что на сервере генерируется пустой PDF