Logosulfite.app
rafagazani/sulfite 999999

Fontes customizadas

Como usar fontes TTF no PDF renderer

Fontes customizadas#

O PDF renderer usa Helvetica por padrão. Para usar outras fontes, carregue arquivos TTF com o FontLoader.

FontLoader#

O FontLoader é independente de runtime. A fonte dos bytes é injetada via FontBytesLoader:

Flutter apps (asset bundle)#

import 'package:sulfite_core/sulfite_core.dart';

final fonts = await FontLoader.load(
  loader: const AssetFontBytesLoader(),   // usa rootBundle
  regular: 'assets/fonts/Inter-Regular.ttf',
  bold: 'assets/fonts/Inter-Bold.ttf',
  italic: 'assets/fonts/Inter-Italic.ttf',
  boldItalic: 'assets/fonts/Inter-BoldItalic.ttf',
);

CLI / servidor (dart:io)#

final fonts = await FontLoader.load(
  loader: const FileFontBytesLoader(),    // usa dart:io File
  regular: '/usr/share/fonts/Inter-Regular.ttf',
  bold: '/usr/share/fonts/Inter-Bold.ttf',
);

Bytes diretos (qualquer ambiente)#

final bytes = await File('Inter-Regular.ttf').readAsBytes();
final font = FontLoader.fromBytes(bytes);
final renderer = PdfRenderer(fontRegular: font);

Usando com o PdfRenderer#

O FontLoader retorna um objeto que pode ser passado ao PdfRenderer para uso nas renderizações.

Fontes no CLI#

O CLI aceita a flag -f com o caminho para um diretório de fontes:

./sulfite -i report.json -d data.json -o output.pdf -f ./fonts/

Arquivos esperados no diretório:

fonts/
├── regular.ttf
├── bold.ttf
├── italic.ttf
└── bolditalic.ttf

Limitações#

  • Apenas fontes TTF são suportadas
  • O HTML renderer não aplica fontes customizadas (usa a fonte do sistema/browser)
  • O CSV e Excel renderers não usam fontes