HTML
Gera HTML com CSS inline que replica o posicionamento do PDF. Gráficos são renderizados com Chart.js 4 (carregado via CDN).
Uso
dart
final htmlBytes = await engine.renderToHtml(context);
// Salvar como arquivo
File('report.html').writeAsBytesSync(htmlBytes);Layout
O HTML usa o mesmo modelo de posicionamento do PDF:
- Cada band →
<div>composition: relativeeheightfixo - Cada elemento →
position: absolutecomleftetopem pixels - A página →
<div class="page">commax-widthbaseado no formato (595px para A4) - Margens →
paddingno container da página
html
<div class="page" style="max-width:595px; padding:40px;">
<div class="band" style="height:120px; position:relative;">
<div style="position:absolute; left:40px; top:40px; font-size:32px; font-weight:bold;">
INVOICE
</div>
</div>
</div>Paginação
O HtmlRenderer implementa paginação explícita multi-página:
- Cada página tem altura exata (
heightdopageSettings, nãomin-height) HeaderBandé repetida em todas as páginas na ordem de definiçãoSummaryBandé ancorada ao rodapé da última página — equivalente ao comportamento do PDF- Quebra de página via
forcePageBreakBefore: truena band insere uma nova<div class="page">
Gráficos
Gráficos (ChartElement) são renderizados como <canvas> com Chart.js 4. O script é injetado automaticamente via CDN:
html
<script src="https://cdn.jsdelivr.net/npm/chart.js@4"></script>Os dados e a configuração do gráfico são inline no HTML. Funciona ao abrir o arquivo em um browser com acesso à internet.
Recursos suportados:
- Barras empilhadas —
stacked: trueativascales.x.stackedescales.y.stackedno Chart.js (só para tipobar) - Barras agrupadas — comportamento padrão com múltiplas séries
- Borda —
hasBorderaplica CSSborder(sólida ou tracejada) ao container do canvas - Legenda — posição validada (
top,bottom,left,right) - Paleta de cores — séries sem cor definida usam a paleta padrão de 10 cores; fatias de pizza sempre usam a paleta
- IDs únicos — cada canvas tem ID com contador incremental, evitando colisões em group bands
Print
O HTML inclui estilos @media print otimizados:
- Remove sombras e margens externas
- Aplica margens do
pageSettingsvia@page
O título do relatório não é inserido no output HTML — nenhuma tag
<h1>é gerada pelo renderer.
Limitações
- Barcodes dependem de JavaScript no browser (JsBarcode/QRCode.js)
- Fontes customizadas não são aplicadas (usa a fonte do sistema)