flutter_pdf_invoice_widgets 1.0.1
flutter_pdf_invoice_widgets: ^1.0.1 copied to clipboard
Customizable, server-compatible PDF invoices, receipts, quotes, credit notes, and delivery documents for Dart and Flutter.
import 'dart:io';
import 'package:flutter_pdf_invoice_widgets/flutter_pdf_invoice_widgets.dart';
import 'package:pdf/pdf.dart';
Future<void> main() async {
final document = InvoiceDocument(
type: InvoiceDocumentType.modernInvoice,
company: CompanyInfo(
name: 'Acme Studio',
address: 'King Fahd Road',
city: 'Riyadh',
country: 'Saudi Arabia',
email: 'billing@example.com',
taxId: 'VAT-123456789',
),
customer: CustomerInfo(
name: 'Example Customer',
email: 'customer@example.com',
),
info: InvoiceInfo(
invoiceNumber: 'INV-2026-001',
invoiceDate: DateTime(2026, 8, 9),
dueDate: DateTime(2026, 9, 8),
currency: 'SAR',
currencySymbol: 'SAR ',
statusValue: InvoiceStatus.unpaid,
notes: 'Thank you for your business.',
terms: 'Payment is due within 30 days.',
),
items: [
InvoiceItem(
description: 'Flutter development',
quantity: 24,
unit: 'hours',
unitPrice: 250,
taxRate: 15,
customColumns: {'project': 'Invoice application'},
),
],
adjustments: [
InvoiceAdjustment(
label: 'Project discount',
type: InvoiceAdjustmentType.discount,
calculation: InvoiceAdjustmentCalculation.percentage,
value: 5,
),
],
amountPaid: 1000,
payment: PaymentInfo(
iban: 'SA0000000000000000000000',
paymentMethods: ['Bank transfer', 'Card'],
qrData: 'https://example.com/pay/INV-2026-001',
),
);
document.validateOrThrow();
final style = InvoiceStyle.modern().copyWith(
primaryColor: PdfColors.indigo700,
labels: {'description': 'Service', 'project': 'Project'},
tableStyle: TableStyle(
columns: [
InvoiceColumn.index(),
InvoiceColumn.description(),
InvoiceColumn(id: 'project', header: 'Project', flex: 2),
InvoiceColumn.quantity(),
InvoiceColumn.unitPrice(),
InvoiceColumn.tax(),
InvoiceColumn.total(),
],
),
);
final template = InvoiceTemplateRegistry().create(
document,
style: style,
metadata: const InvoicePdfMetadata(
subject: 'Example invoice generated by flutter_pdf_invoice_widgets',
),
);
final bytes = await template.generate(
onProgress: (progress) =>
stdout.writeln('Generating PDF: ${(progress * 100).round()}%'),
);
await File('invoice.pdf').writeAsBytes(bytes, flush: true);
stdout.writeln('Wrote invoice.pdf');
}
/// Loads an offline TTF font for non-Latin text in Dart/server applications.
Future<InvoiceStyle> unicodeStyle(String fontPath) async {
final bytes = await File(fontPath).readAsBytes();
final font = PdfFontLoader.fromBytes(bytes);
return InvoiceStyle(
primaryFont: font,
boldFont: font,
fontFallback: [font],
localization: InvoiceLocalization.arabic(),
);
}