Веб-сервис Node.js, использующий Puppeteer для создания PDF, создает пустой файл PDF - PullRequest
0 голосов
/ 06 июня 2019

Следующий код взят из службы REST Node.js. «генерировать» - это метод класса (не показан). Вызов «генерировать» показан ниже определения класса.

Когда я вызываю эту конечную точку, создается PDF («test.pdf»), и результаты возвращаются в браузер; однако, это пусто. Это как если бы вызов Handlebars не выполнялся или код опередил этот вызов и выполнил его с пустой строкой ("h").

При этом я зарегистрировал значение "h", и он достаточно точно отображает HTML-документ со всеми заполнителями Handlebar, заполненными правильно.

У меня есть чувство, что это связано с Обещаниями, но я не уверен. Надеюсь, другая пара глаз поможет мне увидеть проблему.

ПРИМЕЧАНИЕ. Мне известно об асинхронном / ожидании, однако я нахожусь на узле 6.9.5, поэтому он недоступен.

Заранее спасибо!

class PDF {
    ...
    generate() {
        return new Promise((resolve,reject)=>{
            this.render().then((h)=>{
                const browser = Puppeteer.launch({headless: true}).then((b)=>{
                    const page = b.newPage().then((p)=>{
                        p.setContent(h, {waitUntil: 'load'}).then(()=>{
                            p.pdf({path: 'test.pdf', format: 'A4'}).then((z)=>{
                                resolve(z);
                            });
                        });
                    });
                });
            });
        });
    }
}


// *****************************************************************************
// REST API Routes
// *****************************************************************************
app.get('/mysite/pdf', (req,res)=>{
    var pdf = new PDF(33);
    pdf.generate().then((data)=>{
        res.contentType('application/pdf');
        res.send(data);
    });
});

1 Ответ

0 голосов
/ 07 июня 2019

Проблема была не в Node, а в шаблоне HTML, который я загружал. В нем был неверный HTML, из-за которого страница не отображалась в браузере, не говоря уже о создании пустого PDF.

...