simple_pdf_generator 0.2.0 copy "simple_pdf_generator: ^0.2.0" to clipboard
simple_pdf_generator: ^0.2.0 copied to clipboard

A lightweight Flutter package to generate PDFs from structured data.

example/lib/main.dart

// ignore_for_file: public_member_api_docs

import 'dart:convert';
import 'dart:io';
import 'dart:typed_data';

import 'package:flutter/material.dart';
import 'package:path_provider/path_provider.dart';
import 'package:open_file_safe/open_file_safe.dart';
import 'package:simple_pdf_generator/simple_pdf_generator.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Simple PDF Generator Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const HomePage(),
    );
  }
}

class HomePage extends StatefulWidget {
  const HomePage({super.key});

  @override
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  /// 1×1 PNG used as a stand-in for a logo/signature column.
  static final Uint8List _demoPngBytes = base64Decode(
    'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg==',
  );

  // Dummy data
  List<Map<String, dynamic>> get summaryReport => [
        {
          "date": "2026-01-01",
          "avgFatcm": 3.5,
          "avgSnfcm": 8.2,
          "avgClrcm": 25,
          "totalQtycm": 120,
          "totalAmtcm": 3000,
        },
        {
          "date": "2026-01-02",
          "avgFatcm": 3.8,
          "avgSnfcm": 8.5,
          "avgClrcm": 26,
          "totalQtycm": 150,
          "totalAmtcm": 3500,
        },
        {
          "date": "2026-01-03",
          "avgFatcm": 3.8,
          "avgSnfcm": 8.5,
          "avgClrcm": 26,
          "totalQtycm": 150,
          "totalAmtcm": 3500,
        },
        {
          "date": "2026-01-04",
          "avgFatcm": 3.8,
          "avgSnfcm": 8.5,
          "avgClrcm": 26,
          "totalQtycm": 150,
          "totalAmtcm": 3500,
        },
      ];

  // Generate PDF
  void generatePdf() async {
    try {
      final pdf = await SimplePdf.generate(
        header: PdfHeader(
          title: "My Organization",
          subtitle: "Summary Report",
          extra: "01/01/2026 - 10/01/2026",
        ),
        tables: [
          PdfTable(
            headers: ["Date", "Fat", "SNF", "CLR", "Qty", "Amount"],
            data: summaryReport,
            mapper: (item) => {
              "Date": item['date'].toString(),
              "Fat": (item['avgFatcm'] ?? 0).toString(),
              "SNF": (item['avgSnfcm'] ?? 0).toString(),
              "CLR": (item['avgClrcm'] ?? 0).toString(),
              "Qty": (item['totalQtycm'] ?? 0).toString(),
              "Amount": (item['totalAmtcm'] ?? 0).toString(),
            },
          ),
          PdfTable(
            headers: ["Metric", "Value"],
            data: const [
              {"Metric": "Rows", "Value": "4"},
              {"Metric": "Period", "Value": "Jan 2026"},
            ],
          ),
          PdfTable(
            headers: ["Label", "Photo", "Amount"],
            data: [
              {
                "Label": "With typed cells",
                "Photo": PdfTableCell.image(
                  _demoPngBytes,
                  maxWidth: 28,
                  maxHeight: 28,
                ),
                "Amount": r"$99.00",
              },
              {
                "Label": "String-only row",
                "Photo": _demoPngBytes,
                "Amount": "12.50",
              },
            ],
          ),
        ],
        footer: PdfFooter(
          text: "Generated by simple_pdf_generator",
        ),
      );

      // Save file
      final output = await getTemporaryDirectory();
      final file = File("${output.path}/App-Overview-Summary.pdf");

      await file.writeAsBytes(await pdf.save());

      // Open file
      await OpenFile.open(file.path);

      // Show success
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(content: Text("PDF saved at: ${file.path}")),
      );
    } catch (e) {
      print("Error generating PDF: $e");

      ScaffoldMessenger.of(context).showSnackBar(
        const SnackBar(content: Text("Error generating PDF")),
      );
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('PDF Generator Example'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: generatePdf,
          child: const Text("Generate PDF"),
        ),
      ),
    );
  }
}
4
likes
0
points
419
downloads

Publisher

verified publishermohsinpatel.online

Weekly Downloads

A lightweight Flutter package to generate PDFs from structured data.

Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

flutter, pdf

More

Packages that depend on simple_pdf_generator