Executando verificação de segurança...
1

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 });
Carregando publicação patrocinada...
1

Eu estou planejando fazer um saas para isso. Seria um experimento para mim, e colocar quase uma década de experiência trabalhando para projetos privados.

Basicamente, em essência, você requisita para api passando o html content ou um endpoint com o html content, e ele renderiza o pdf de maneira inteligente.

Primero, estima o tamanho, se for menos que 1mb, ai ele irá te retornar o pdf (uma url contendo o pdf, mas com opção de retornar application/pdf direto).

Se for maior, ele irá para uma queue e você poderá optar por ter um webhook para pegar o pdf, ou uma polling fetch baseado no id.

Eu usarei algumas técnicas que drasticamente reduz custos, então terá um custo bem baixo por pdf (claro, vai depender do tempo de renderização de cada pdf, mas ai você pode definir um limite tanto de budge quanto de tamanho, ai nunca terá surpresa, a ideia é ser 'pay per use' com um free tier).

O que você acha dessa ideia? Vê algum potencial uso? Claro, além disso tem outras tools, mas a essência em si, seria isso.