Ahmad Abukhalaf
ย ยทย CEO at Golden Line

Export a List of documents to PDF in Arabic

Export a List of documents to PDF in Arabic ๐Ÿ˜„

HERE THE CODE

// Automatic FlutterFlow imports
import '/backend/backend.dart';
import '/flutter_flow/flutter_flow_theme.dart';
import '/flutter_flow/flutter_flow_util.dart';
import '/custom_code/actions/index.dart'; // Imports other custom actions
import '/flutter_flow/custom_functions.dart'; // Imports custom functions
import 'package:flutter/material.dart';
// Begin custom action code
// DO NOT REMOVE OR MODIFY THE CODE ABOVE!

import 'package:http/http.dart';
import 'package:flutter/services.dart';
import 'package:pdf/widgets.dart';
import 'dart:io';
import 'package:http/http.dart' as http;
import 'package:pdf/pdf.dart';
import 'package:pdf/widgets.dart' as pw;
import 'package:printing/printing.dart';

Future exportPDF(
  BuildContext context,
  List<OrdersRecord> ordersDoc,
  String name,
  String imgurl,
  String date,
) async {
  // Add your function code here!
  final fontData = await loadFontData(
      'https://arbfonts.com//wp-content/fonts/brands-arasbic-fonts//BoutrosNewsH1-Bold.ttf');
  final ttf = pw.Font.ttf(fontData);
  final pdf = pw.Document();
  final netImage = await networkImage(imgurl);
  pdf.addPage(pw.MultiPage(
      pageFormat: PdfPageFormat.a4,
      textDirection: pw.TextDirection.rtl,
      theme: pw.ThemeData.withFont(
        base: ttf,
      ),
      build: (context) => [
            pw.Header(
                level: 0,
                child: pw.Row(
                  children: [
                    pw.Column(
                        crossAxisAlignment: pw.CrossAxisAlignment.start,
                        children: [
                          pw.Row(
                              crossAxisAlignment: pw.CrossAxisAlignment.start,
                              mainAxisAlignment:
                                  pw.MainAxisAlignment.spaceBetween,
                              children: [
                                pw.Padding(
                                  padding: pw.EdgeInsetsDirectional.fromSTEB(
                                      5, 0, 5, 0),
                                  child: pw.Text(
                                    'ุงู„ู…ู†ุฏูˆุจ',
                                  ),
                                ),
                                pw.Padding(
                                  padding: pw.EdgeInsetsDirectional.fromSTEB(
                                      0, 0, 0, 0),
                                  child: pw.Text(
                                    name,
                                  ),
                                )
                              ]),
                          pw.Row(
                              crossAxisAlignment: pw.CrossAxisAlignment.start,
                              mainAxisAlignment:
                                  pw.MainAxisAlignment.spaceBetween,
                              children: [
                                pw.Padding(
                                  padding: pw.EdgeInsetsDirectional.fromSTEB(
                                      5, 5, 5, 5),
                                  child: pw.Text(
                                    'ุงู„ุชุงุฑูŠู€ู€ุฎ',
                                  ),
                                ),
                                pw.Padding(
                                  padding: pw.EdgeInsetsDirectional.fromSTEB(
                                      0, 5, 0, 5),
                                  child: pw.Text(
                                    date,
                                  ),
                                )
                              ]),
                        ]),
                    pw.Image(netImage,
                        fit: pw.BoxFit.contain, width: 100, height: 100)
                  ],
                  mainAxisAlignment: pw.MainAxisAlignment.spaceBetween,
                )),
            pw.Table.fromTextArray(
                context: context,
                headerStyle: pw.TextStyle(font: ttf),
                cellAlignment: pw.Alignment.topRight,
                columnWidths: {
                  0: pw.FlexColumnWidth(2), // fixed to 100 width
                  1: pw.FlexColumnWidth(1.5),
                  2: pw.FlexColumnWidth(3), //fixed to 100 width
                  3: pw.FlexColumnWidth(3),
                  4: pw.FlexColumnWidth(3),
                  5: pw.FlexColumnWidth(4),
                  6: pw.FlexColumnWidth(1),
                },
                data: <List<String>>[
                  <String>[
                    'ู…ู„ุงุญุธุงุช',
                    'ุงู„ุณุนุฑ',
                    'ุงู„ุตูุญุฉ',
                    'ุฑู‚ู… ุจุฏูŠู„',
                    'ุฑู‚ู… ุงู„ู‡ุงุชู',
                    'ุงู„ุนู†ูˆุงู†',
                    '#'
                  ],
                  ...ordersDoc.map((order) => [
                        order.notes,
                        order.cod.toString(),
                        order.pagename,
                        order.phone2.toString(),
                        order.phone1.toString(),
                        order.adress,
                        (ordersDoc.indexOf(order) + 1).toString(),
                      ])
                ]),
            pw.Footer(
                padding: pw.EdgeInsets.fromLTRB(0, 20, 0, 0),
                trailing: pw.Row(
                    crossAxisAlignment: pw.CrossAxisAlignment.start,
                    children: [
                      pw.Column(
                          crossAxisAlignment: pw.CrossAxisAlignment.center,
                          children: [
                            pw.Padding(
                              padding:
                                  pw.EdgeInsetsDirectional.fromSTEB(5, 5, 5, 5),
                              child: pw.Text(
                                'ุชูˆู‚ูŠู€ู€ุน ุงู„ู…ุณุชู„ู€ู€ู…',
                              ),
                            ),
                            pw.Padding(
                              padding:
                                  pw.EdgeInsetsDirectional.fromSTEB(5, 5, 5, 5),
                              child: pw.Text(
                                '.........................',
                              ),
                            ),
                          ])
                    ])),
          ]));

  // Print the pdf file
  await Printing.layoutPdf(
      onLayout: (PdfPageFormat format) async => pdf.save());
}

Future<ByteData> loadFontData(String url) async {
  final response = await http.get(Uri.parse(url));
  if (response.statusCode == 200) {
    return response.bodyBytes.buffer.asByteData();
  } else {
    throw Exception('Failed to load font from URL');
  }
}
8
4 replies