Генерация PDF в Flutter
Создание PDF в Flutter
Для создания PDF я использовал пакет, который так и называется pdf. Доба, вляем в pubspec.yaml зависимость
pdf: ^1.3.17
и запускаем
flutter pub get
Теперь можно работать с pdf. Особенность пакета в том, что названия многих классов совпадают с классами в flutter. Советую импортировать библиотеки пакета с помощью алиасов. Например у меня получилось вот так:
import 'package:pdf/pdf.dart' as pdf; import 'package:pdf/widgets.dart' as pdf;
Документ заполняется с помощью виджетов, во многом схожих с виджетами flutter
final content = List<pdf.Widget>(); ... final pdfDoc = pdf.Document(); pdfDoc.addPage(pdf.Page( pageFormat: pdf.PdfPageFormat.a4, build: (pdf.Context context) { return pdf.Center(child: pdf.Column(children: content)); } ));
В своем проекте я использовал виджеты Center, Column, Row, Container, Text
Сохранение PDF во временный файл
Для имени фременного файла я хочу использовать UUID. Генерировать его будем с помощью пакета
uuid: 2.0.1
Для получения директории с временными файлами используем другой пакет
path_provider: ^1.2.0
Пакеты подключили, пишем код
final output = await getTemporaryDirectory(); final fileName = "${output.path}/${new Uuid().v1()}.pdf"; final file = File(fileName); await file.writeAsBytes(pdfDoc.save());
Открываем PDF файл
Все как всегда просто. Подключаем пакет
open_file: 2.0.3
И открываем файл
OpenFile.open(fileName);