我已经编写了用于创建组中单个成员的 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
添加页面时,可以使用
pw.MultiPage
代替pw.Page
。
pdf.addPage(
pw.MultiPage(
build: (context) {
return [page1Wdiget, page2Widget....];
}
),
)
更多关于多页