simple_pdf_generator 0.1.0
simple_pdf_generator: ^0.1.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:io';
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> {
// 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"},
],
),
],
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"),
),
),
);
}
}