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