You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

77 lines
2.6 KiB

import 'package:pdf/widgets.dart' as pw;
import 'package:pdf/pdf.dart';
import 'package:printing/printing.dart';
import '../pages/commandes_screen.dart';
Future<void> printOrderPDF(Order order) async {
String _formatTime(DateTime dateTime) {
return '${dateTime.hour.toString().padLeft(2, '0')}:${dateTime.minute.toString().padLeft(2, '0')} ${dateTime.day.toString().padLeft(2, '0')}/${dateTime.month.toString().padLeft(2, '0')}/${dateTime.year}';
}
final pdf = pw.Document();
final pageFormat = PdfPageFormat(
204.1, // 72 mm imprimable
595.0, // 210 mm
marginAll: 0,
);
pdf.addPage(
pw.Page(
pageFormat: pageFormat,
build: (pw.Context context) {
return pw.Padding(
padding: const pw.EdgeInsets.fromLTRB(6, 6, 6, 18),
child: pw.Column(
crossAxisAlignment: pw.CrossAxisAlignment.start,
children: [
pw.Divider(),
pw.Text('Commande n° ${order.numeroCommande}', style: pw.TextStyle(fontSize: 10, fontWeight: pw.FontWeight.bold)),
pw.Text('Table: ${order.tablename}', style: pw.TextStyle(fontSize: 8)),
pw.Text('Date: ${_formatTime(order.dateCommande)}', style: pw.TextStyle(fontSize: 8)),
pw.SizedBox(height: 8),
pw.Divider(),
pw.SizedBox(height: 8),
pw.Row(
mainAxisAlignment: pw.MainAxisAlignment.spaceBetween,
children: [
pw.Text('Désignation', style: pw.TextStyle(fontSize: 9, fontWeight: pw.FontWeight.bold)),
pw.Text('Cocher', style: pw.TextStyle(fontSize: 9)),
],
),
pw.SizedBox(height: 8),
pw.Divider(),
...order.items.map(
(item) => pw.Row(
mainAxisAlignment: pw.MainAxisAlignment.spaceBetween,
children: [
pw.Container(
width: 120,
child: pw.Text(
'${item.quantite} x ${item.nom ?? 'Item'}',
style: pw.TextStyle(fontSize: 8),
),
),
pw.Container(
width: 10,
height: 10,
decoration: pw.BoxDecoration(
border: pw.Border.all(width: 1),
),
),
],
),
),
pw.Divider(),
pw.Spacer(),
pw.SizedBox(height: 10), // marge visible en bas
],
),
);
},
),
);
await Printing.layoutPdf(
onLayout: (PdfPageFormat format) async => pdf.save(),
);
}