Engines PDF

API comum: renderReportPdf(model, res, { reportDir, pdf }). Troque só o pacote do engine.

EnginePacoteQuando usar
Puppeteer @crystal-node/engine-puppeteer Apps Node genéricas; melhor fidelidade CSS moderna
wkhtmltopdf @crystal-node/engine-wkhtmltopdf Ambientes com binário wkhtml já padronizado
WeasyPrint @crystal-node/engine-weasyprint Pipeline Python / CSS paged media
Devbox @crystal-node/engine-devbox Framework com res.pdf

Exemplo Puppeteer

const reportEngine = require('@crystal-node/engine-puppeteer');
// equivalente via meta-pacote:
// const { reportEnginePuppeteer } = require('@crystal-node/runtime');

await reportEngine.renderReportPdf(model, res, {
  reportDir: __dirname,
  pdf: {
    marginTop: 28,
    marginBottom: 14,
    marginLeft: 0,
    marginRight: 0,
    pageWidth: '215.9mm',
    pageHeight: '279.4mm'
  }
});

Guia técnico adicional (markdown no repo): engines-pdf.md.