How to render Uint8List as a pdf?
2,114
You can save the file locally and render it using some pdf viewer
final String dir = (await getApplicationDocumentsDirectory()).path;
final String path = '$dir/example.pdf';
final File file = File(path);
await file.writeAsBytes(doc.save());
Now you can use this path to view the pdf using a pdf viewer.
You can check this medium post for reference.
Author by
CS-learner
Updated on December 04, 2022Comments
-
CS-learner over 1 year
I currently have this function that returns a Uint8List. I would like to render it as a pdf in my android app so I can see it. Not sure how to do this, any help is appreciated! This is the source code if that is also of any help. Thank you https://github.com/DavBfr/dart_pdf/blob/master/demo/lib/invoice.dart
Future<Uint8List> generateInvoice(PdfPageFormat pageFormat) async { final lorem = pw.LoremText(); final products = <Product>[ Product('19874', lorem.sentence(4), 3.99, 2), Product('98452', lorem.sentence(6), 15, 2), Product('28375', lorem.sentence(4), 6.95, 3), Product('95673', lorem.sentence(3), 49.99, 4), Product('23763', lorem.sentence(2), 560.03, 1), Product('55209', lorem.sentence(5), 26, 1), Product('09853', lorem.sentence(5), 26, 1), ]; final invoice = Invoice( invoiceNumber: '982347', products: products, customerName: 'Abraham Swearegin', customerAddress: '54 rue de Rivoli\n75001 Paris, France', paymentInfo: '4509 Wiseman Street\nKnoxville, Tennessee(TN), 37929\n865-372-0425', tax: .15, baseColor: PdfColors.teal, accentColor: PdfColors.blueGrey900, ); return await invoice.buildPdf(pageFormat); } class Invoice { Invoice({ this.products, this.customerName, this.customerAddress, this.invoiceNumber, this.tax, this.paymentInfo, this.baseColor, this.accentColor, }); final List<Product> products; final String customerName; final String customerAddress; final String invoiceNumber; static const _darkColor = PdfColors.blueGrey800; static const _lightColor = PdfColors.white; PdfColor get _baseTextColor => baseColor.luminance < 0.5 ? _lightColor : _darkColor; PdfColor get _accentTextColor => baseColor.luminance < 0.5 ? _lightColor : _darkColor; double get _total => products.map<double>((p) => p.total).reduce((a, b) => a + b); double get _grandTotal => _total * (1 + tax); PdfImage _logo; Future<Uint8List> buildPdf(PdfPageFormat pageFormat) async { // Create a PDF document. final doc = pw.Document(); final font1 = await rootBundle.load('assets/roboto1.ttf'); final font2 = await rootBundle.load('assets/roboto2.ttf'); final font3 = await rootBundle.load('assets/roboto3.ttf'); _logo = PdfImage.file( doc.document, bytes: (await rootBundle.load('assets/logo.png')).buffer.asUint8List(), ); // Add page to the PDF doc.addPage( pw.MultiPage( pageTheme: _buildTheme( pageFormat, font1 != null ? pw.Font.ttf(font1) : null, font2 != null ? pw.Font.ttf(font2) : null, font3 != null ? pw.Font.ttf(font3) : null, ), header: _buildHeader, footer: _buildFooter, build: (context) => [ _contentHeader(context), _contentTable(context), pw.SizedBox(height: 20), _contentFooter(context), pw.SizedBox(height: 20), _termsAndConditions(context), ], ), ); // Return the PDF file content return doc.save(); }
-
sj_959 over 2 yearsThanks. Although this does generate a pdf file, when I try to open the file, I get an error saying
Failed to load PDF document.