printReportTable method
Generates and optionally prints or previews a PDF table report.
This method builds a table-based PDF document using the provided reportData
. reportData has tableData and tableSummary, and more...
The layout can be customized using paperSize
, landscape
, and columnFlexes
.
The PDF can be previewed or printed based on the platform and the isView
flag.
- On Web: Always previews the PDF.
- On Windows: If
isView
istrue
, opens a temporary file in the default viewer; otherwise prints directly. - On Android/iOS/Linux/macOS: Opens or previews the PDF using the available tools.
Parameters:
reportData
: Contains the table data, summary, metadata, and other information to render the report.paperSize
: Specifies the size of the PDF page (e.g., 'A4').landscape
: Iftrue
, renders the report in landscape mode. Default isfalse
.columnFlexes
: Optional. Defines the flex values (column widths) for the table.isView
: On supported platforms, controls whether to view or print directly. Default isfalse
.use_highlighter
: Iftrue
, applies a highlight style to the table. This will uses last column to highlight rows
Returns a Future that completes when the operation finishes.
Implementation
Future<void> printReportTable(
DataReportTable reportData,
String paperSize, {
bool landscape = false,
List<int>? columnFlexes, // New optional parameter
bool isView = false, // New parameter for view/print control
bool use_highlighter = false,
bool showSequence = false,
}) async {
// Default to flex value of 1 for all columns if not provided
final flexes =
columnFlexes ?? List.filled(reportData.tableData.first.length, 1);
final pdf = pw.Document();
pdf.addPage(
await TableReportTemplates.buildReportTable(
paperSize,
tableData: reportData.tableData,
tableSummary: reportData.tableSummary,
language: reportData.language,
date: reportData.date,
fromDate: reportData.fromDate,
toDate: reportData.toDate,
companyName: reportData.companyName!,
address: reportData.address!,
landscape: landscape,
columnFlexes: flexes, // Pass the flex values
useHighlighter: use_highlighter,
showSequence: showSequence,
),
);
final pdfBytes = await pdf.save();
if (kIsWeb) {
// Handle web preview
await Printing.layoutPdf(
onLayout: (PdfPageFormat format) async => pdfBytes,
);
} else if (UniversalPlatform.isWindows) {
// Handle Windows with view/print option
if (isView) {
// Get the temporary directory
final tempDir = await getTemporaryDirectory();
final tempFilePath = '${tempDir.path}/temp_invoice.pdf';
final tempFile = File(tempFilePath);
// Write PDF to temporary file
await tempFile.writeAsBytes(pdfBytes);
// Open with default PDF viewer
await OpenFile.open(tempFilePath);
} else {
// Direct print
await Printing.layoutPdf(
onLayout: (PdfPageFormat format) async => pdfBytes,
usePrinterSettings: true,
);
}
} else if (UniversalPlatform.isLinux || UniversalPlatform.isMacOS) {
// Handle other desktop platforms
await Printing.layoutPdf(
onLayout: (PdfPageFormat format) async => pdfBytes,
);
} else if (UniversalPlatform.isAndroid || UniversalPlatform.isIOS) {
final tempDir = await getTemporaryDirectory();
final tempFilePath = '${tempDir.path}/temp_table_report.pdf';
final tempFile = File(tempFilePath);
await tempFile.writeAsBytes(pdfBytes);
await OpenFile.open(tempFilePath);
}
}