#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