No meu caso, utilizei o motor de templates Nunjucks, que é baseado no Jinja2. Criei o template em HTML, fazendo-o semelhante a uma template string. Então, chamei a biblioteca, passei os dados para que ela realizasse a renderização do HTML e, posteriormente, usei o Puppeteer para gerar o PDF
{% endif %} {% if rdo.images %}
<span> IMAGENS ({{ rdo.images | length }}) </span>
<div class="images">
{% for image in rdo.images %}
<div class="image">
<img
loading="lazy"
src="{{ image.url }}"
alt="{{ image.description }}"
/>
<span class="text-overlay">{{ image.description }}</span>
</div>
{% endfor %}
</div>
{% endif %}
nunjucks.configure(
'./files', {
autoescape: true
});
const htmlContent = nunjucks.render('template.html', data);
fs.writeFileSync('./files/output.html', htmlContent);
const browser = await puppeteer.launch(
{
headless: true,
args: ['--no-sandbox', '--disable-setuid-sandbox']
}
);
const page = await browser.newPage();
await page.setContent(htmlContent);
await page.addStyleTag({ path: './files/style.css' });
await page.pdf({ path: './files/output.pdf', format: 'A4', printBackground: true });