Skip to content

sulfite.appJSON → PDF, HTML, CSV, Excel

Defina relatórios como JSON, alimente com dados, renderize no formato que precisar.

SulfiteSulfite

Como funciona

┌──────────┐     ┌──────────┐     ┌──────────────┐     ┌──────────┐
│  JSON do │────▶│  Parser  │────▶│  Processador  │────▶│ Renderer │──▶ PDF / HTML / CSV / XLSX
│ relatório│     │          │     │   de dados    │     │          │
└──────────┘     └──────────┘     └──────────────┘     └──────────┘


                                  ┌─────┴─────┐
                                  │  Payload   │
                                  │   (dados)  │
                                  └────────────┘

Para quem é o Sulfite?

Se você já usou FastReport, JasperReports ou Crystal Reports, sabe o poder de um motor de relatórios de verdade. O Sulfite traz essa mesma ideia para o ecossistema Dart e Flutter — e, no futuro, para servidores backend também.

O problema real

Você vendeu seu primeiro app de vendas. O cliente pede um relatório de faturamento mensal. Você programa, entrega, funciona. Aí vem o segundo cliente — e quer o mesmo relatório, mas com colunas diferentes, outro logo, outra ordem. O terceiro quer um relatório que nem existia. Sem um motor de relatórios, cada pedido vira demanda de desenvolvimento: mexer no código, compilar, publicar uma nova versão. Com o Sulfite, o layout é um JSON. Você muda o template, alimenta com os dados do cliente e gera o PDF — sem recompilar nada.

Aplicações comuns

Caso de usoComo o Sulfite resolve
Relatórios sob medida por clienteCada cliente tem seu próprio template JSON. Mude o layout sem tocar no código do app.
Notas fiscais e recibosMonte o layout uma vez no Studio, alimente com dados do seu ERP e gere PDFs idênticos para cada venda.
Relatórios gerenciaisVendas por período, estoque, fluxo de caixa — com agrupamento, totais e gráficos. Exporte em PDF ou Excel.
Etiquetas e códigos de barrasImprima etiquetas de produto com código de barras (Code128, EAN13, QR Code) direto do app Flutter.
Laudos e fichas técnicasRelatórios com imagens, tabelas e campos dinâmicos para clínicas, laboratórios e indústria.
Catálogos de produtosGere catálogos com foto, descrição e preço a partir de um JSON com centenas de itens.
Boletos e carnêsLayout fixo com dados variáveis — perfeito para gerar documentos em lote.
Dashboards exportáveisO mesmo relatório que aparece na tela do app pode ser exportado como PDF ou HTML com gráficos.
Servidor de relatóriosUse o sulfite_core no backend (Dart Frog, Shelf) para gerar PDFs sob demanda via API REST.

Onde o Sulfite roda

AmbienteStatusComo usar
App Flutter (mobile/desktop/web)ProntoImporte sulfite_core e gere relatórios dentro do app.
Editor visualProntoUse o Sulfite Studio para desenhar o layout sem escrever JSON na mão.
Linha de comandoProntoCompile o CLI como binário nativo e gere PDFs em scripts e pipelines.
Servidor backendProntoUse o sulfite_server para gerar relatórios via API REST — armazenamento, autenticação, geração síncrona/assíncrona, conexões criptografadas.

Ecossistema

PacoteO que faz
sulfite_coreEngine de processamento e renderização. Modelos, parser, processador de dados, renderers (PDF, HTML, CSV, Excel), parâmetros com lookups dinâmicos e validação.
sulfite_studioEditor visual Flutter. Canvas com drag & drop, zoom, undo/redo, filtros dinâmicos, preview em tempo real.
sulfite_datasourcesResolvers para fontes externas — REST, PostgreSQL e PostgREST/Supabase. Lookups de banco com paginação e cache.
sulfite_report_managerWidget Flutter completo de gerenciamento de relatórios — CRUD, busca, permissões granulares, visualizador integrado, gerenciador de conexões.
sulfite_chatIntegração com IA para geração de relatórios. Agente LLM gera JSON a partir de linguagem natural, com auto-correção.
sulfite_cliFerramenta de linha de comando. Recebe JSON, gera PDF. Compilável para binário nativo.

Exemplo rápido

dart
import 'dart:io';
import 'package:sulfite_core/sulfite_core.dart';

void main() async {
  final engine = SulfiteEngineImpl();

  final report = await engine.parseReport(File('report.json').readAsStringSync());
  final data = jsonDecode(File('data.json').readAsStringSync());
  final context = await engine.processData(report, data);

  final pdfBytes = await engine.renderToPdf(context);
  await File('output.pdf').writeAsBytes(pdfBytes);

  // Ou HTML, CSV, Excel:
  final htmlBytes = await engine.renderToHtml(context);
  final csvBytes = await engine.renderToCsv(context);
  final xlsxBytes = await engine.renderToExcel(context);
}

Sulfite do 🇧🇷 para o mundo © 2026 Rafael S. Pinheiro