Генерация PDF в Flutter

10.08.2019 at 23:50

Создание 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);