如何在flytter中创建多页pdf

问题描述 投票:0回答:1

我已经编写了用于创建组中单个成员的 pdf 报告的代码,但现在我想创建组中成员列表的集体报告,并且它应该仅在一个 pdf 中,并且使用的包是 https://pub. dev/packages/pdf/versions/3.10.7 下面的代码返回创建一个 pdf 表格,每个表格都包含组中金融交易的一些详细信息

     Here is my code for creating single page report pdf in flutter and i would like to modify this         code such that it will accept list of members as List<String> memberNames and add the report page  for each member on new page in multi page report pdf
   import 'package:bachat_gat/common/common_index.dart';
   import 'package:bachat_gat/features/groups/models/models_index.dart';
   import 'package:flutter/services.dart';
   import 'package:pdf/pdf.dart';
   import 'package:pdf/widgets.dart' as pw;
   import 'package:printing/printing.dart';

   import 'getFontLoad.dart';

   class PdfApi {
      static Future<Uint8List> generateTable(
        List<MemberTransactionDetails> memberData,
        String memberName,
        String groupName) async {
              /  / C reate the Font object
         final rfont = await FontLoaders.loadFont(
        'assets/fonts/NotoSansDevanagari-Regular.ttf');
    final mfont = await FontLoaders.loadFont(
        'assets/fonts/NotoSansDevanagari-Medium.ttf');
    final bfont =
        await FontLoaders.loadFont('assets/fonts/NotoSansDevanagari-Bold.ttf');
    final sbfont = await FontLoaders.loadFont(
        'assets/fonts/NotoSansDevanagari-SemiBold.ttf');
    final nfont = await FontLoaders.loadFont('assets/fonts/marathi.ttf');
    // Create the ThemeData with the loaded font
    var myTheme = pw.ThemeData.withFont(
      base: rfont,
      bold: bfont,
      fontFallback: [nfont, mfont, sbfont],
    );
    final pdf = pw.Document(
      theme: myTheme,
    );
    final headers = [
      'Month',
      'Paid Shares',
      'Loan Taken',
      'Paid Interest',
      'Paid Loan',
      'Remaining Loan',
      'Late Fee',
      'Others',
      'Total Paid'
    ];

    List<double> totalPaid = [];
    for (var m in memberData) {
      double total = m.paidOtherAmount! +
          m.paidInterest! +
          m.paidLoan! +
          m.paidLateFee! +
          m.paidShares!;
      totalPaid.add(total);
    }

    final data = memberData
        .asMap()
        .entries
        .map((entry) => [
              entry.value.trxPeriod ?? '',
              entry.value.paidShares?.toString() ?? '',
              entry.value.loanTaken?.toString() ?? '',
              entry.value.paidInterest?.toString() ?? '',
              entry.value.paidLoan?.toString() ?? '',
              entry.value.remainingLoan?.toString() ?? '',
              entry.value.paidLateFee?.toString() ?? '',
              entry.value.paidOtherAmount?.toString() ?? '',
              totalPaid[entry.key].toString(), // Add totalPaid for each member
            ])
        .toList();

    pdf.addPage(pw.Page(build: (context) {
      return pw.Column(
        children: [
          pw.Text(groupName,
              style: pw.TextStyle(
                fontSize: 20,
                fontWeight: pw.FontWeight.bold,
              )),
          pw.SizedBox(height: 20),
          pw.Column(
            children: [
              pw.Text("Member Name: $memberName",
                  style: pw.TextStyle(
                    fontSize: 15,
                    fontWeight: pw.FontWeight.normal,
                    fontStyle: pw.FontStyle.normal,
                  ))
            ],
          ),
          pw.SizedBox(height: 15),
          pw.TableHelper.fromTextArray(
            headers: headers,
            data: data,
          ),
        ],
      );
    }));
    return pdf.save();
  }

  static Future<void> previewPDF(Uint8List bytes) async {
    await Printing.layoutPdf(onLayout: (PdfPageFormat format) => bytes);
  }

  static Future<void> saveAsPDF(String fileName, Uint8List bytes) async {
    await AppUtils.saveAsBytes(fileName, "pdf", bytes);
> I want to create mutipage report using pdf package
flutter pdf flutter-dependencies
1个回答
0
投票

添加页面时,可以使用

pw.MultiPage
代替
pw.Page

pdf.addPage(
  pw.MultiPage(
    build: (context) {
      return [page1Wdiget, page2Widget....];
    }
   ),
)

更多关于多页

© www.soinside.com 2019 - 2024. All rights reserved.