From b376720b7b0208a69a7a62dcaa3ad0a43f32305b Mon Sep 17 00:00:00 2001 From: Gustl22 Date: Sun, 8 Sep 2024 11:00:28 +0200 Subject: [PATCH 01/11] feat: Column spans --- pdf/lib/src/widgets/table.dart | 154 ++++++++++++++++++++------------ pdf/test/widget_table_test.dart | 49 +++++++++- 2 files changed, 142 insertions(+), 61 deletions(-) diff --git a/pdf/lib/src/widgets/table.dart b/pdf/lib/src/widgets/table.dart index 38df5d9f..6ec895e7 100644 --- a/pdf/lib/src/widgets/table.dart +++ b/pdf/lib/src/widgets/table.dart @@ -30,6 +30,7 @@ class TableRow { this.repeat = false, this.verticalAlignment, this.decoration, + this.columnSpans, }); /// The widgets that comprise the cells in this row. @@ -41,6 +42,8 @@ class TableRow { final BoxDecoration? decoration; final TableCellVerticalAlignment? verticalAlignment; + + final Map? columnSpans; } enum TableCellVerticalAlignment { bottom, middle, top, full } @@ -91,40 +94,6 @@ class TableBorder extends Border { final BorderSide horizontalInside; final BorderSide verticalInside; - - void paintTable(Context context, PdfRect box, - [List? widths, List? heights]) { - super.paint(context, box); - - if (verticalInside.style.paint) { - verticalInside.style.setStyle(context); - var offset = box.x; - for (final width in widths!.sublist(0, widths.length - 1)) { - offset += width!; - context.canvas.moveTo(offset, box.y); - context.canvas.lineTo(offset, box.top); - } - context.canvas.setStrokeColor(verticalInside.color); - context.canvas.setLineWidth(verticalInside.width); - context.canvas.strokePath(); - - verticalInside.style.unsetStyle(context); - } - - if (horizontalInside.style.paint) { - horizontalInside.style.setStyle(context); - var offset = box.top; - for (final height in heights!.sublist(0, heights.length - 1)) { - offset -= height; - context.canvas.moveTo(box.x, offset); - context.canvas.lineTo(box.right, offset); - } - context.canvas.setStrokeColor(horizontalInside.color); - context.canvas.setLineWidth(horizontalInside.width); - context.canvas.strokePath(); - horizontalInside.style.unsetStyle(context); - } - } } class TableContext extends WidgetContext { @@ -315,7 +284,6 @@ class Table extends Widget with SpanningWidget { final TableWidth tableWidth; - final List _widths = []; final List _heights = []; final TableContext _context = TableContext(); @@ -334,69 +302,110 @@ class Table extends Widget with SpanningWidget { _context.firstLine = _context.lastLine; } + List _getFilledChildrenFromColumnSpans(TableRow row) { + if (row.columnSpans == null) { + return row.children; + } + final filledChildren = []; + var n = 0; + // TODO(Gustl22): Handle intrinsic column widths: + // Currently, every cell is calculated by filling the remaining spanned + // cells with empty containers and then sum up their calculated widths. + for (final child in row.children) { + // Columns, which are currently spanned. + final columnSpan = row.columnSpans![n] ?? 1; + filledChildren.add(child); + if (columnSpan > 1) { + filledChildren + .addAll(Iterable.generate(columnSpan - 1, (index) => Container())); + } + n += columnSpan; + } + return filledChildren; + } + + List _getSpannedWidths(List widths, TableRow row) { + final spannedWidths = []; + var n = 0; + for (var i = 0; i < row.children.length; i++) { + final columnSpan = row.columnSpans?[n] ?? 1; + final indices = Iterable.generate(columnSpan, (span) => n + span); + final width = indices.fold(null, (prev, curIndex) { + final current = widths[curIndex]; + if (prev == null && current == null) { + return null; + } + return (prev ?? 0) + (current ?? 0); + }); + spannedWidths.add(width); + n += columnSpan; + } + return spannedWidths; + } + @override void layout(Context context, BoxConstraints constraints, {bool parentUsesSize = false}) { // Compute required width for all row/columns width flex final flex = []; - _widths.clear(); + final widths = []; _heights.clear(); var index = 0; for (final row in children) { var n = 0; - for (final child in row.children) { + for (final child in _getFilledChildrenFromColumnSpans(row)) { final columnWidth = columnWidths != null && columnWidths![n] != null ? columnWidths![n]! : defaultColumnWidth; final columnLayout = columnWidth.layout(child, context, constraints); if (flex.length < n + 1) { flex.add(columnLayout.flex); - _widths.add(columnLayout.width); + widths.add(columnLayout.width); } else { if (columnLayout.flex! > 0) { flex[n] = math.max(flex[n]!, columnLayout.flex!); } - _widths[n] = math.max(_widths[n]!, columnLayout.width!); + widths[n] = math.max(widths[n]!, columnLayout.width!); } n++; } } - if (_widths.isEmpty) { + if (widths.isEmpty) { box = PdfRect.fromPoints(PdfPoint.zero, constraints.smallest); return; } - final maxWidth = _widths.reduce((double? a, double? b) => a! + b!); + final maxWidth = widths.reduce((double? a, double? b) => a! + b!); // Compute column widths using flex and estimated width if (constraints.hasBoundedWidth) { final totalFlex = flex.reduce((double? a, double? b) => a! + b!)!; var flexSpace = 0.0; - for (var n = 0; n < _widths.length; n++) { + for (var n = 0; n < widths.length; n++) { if (flex[n] == 0.0) { - final newWidth = _widths[n]! / maxWidth! * constraints.maxWidth; + final newWidth = widths[n]! / maxWidth! * constraints.maxWidth; if ((tableWidth == TableWidth.max && totalFlex == 0.0) || - newWidth < _widths[n]!) { - _widths[n] = newWidth; + newWidth < widths[n]!) { + widths[n] = newWidth; } - flexSpace += _widths[n]!; + flexSpace += widths[n]!; } } final spacePerFlex = totalFlex > 0.0 ? ((constraints.maxWidth - flexSpace) / totalFlex) : double.nan; - for (var n = 0; n < _widths.length; n++) { + for (var n = 0; n < widths.length; n++) { if (flex[n]! > 0.0) { final newWidth = spacePerFlex * flex[n]!; - _widths[n] = newWidth; + widths[n] = newWidth; } } } - final totalWidth = _widths.reduce((double? a, double? b) => a! + b!)!; + final totalWidth = widths.reduce((double? a, double? b) => a! + b!)!; // Compute final widths var totalHeight = 0.0; @@ -406,17 +415,21 @@ class Table extends Widget with SpanningWidget { continue; } + final spannedWidths = _getSpannedWidths(widths, row); + var n = 0; var x = 0.0; var lineHeight = 0.0; + for (final child in row.children) { - final childConstraints = BoxConstraints.tightFor(width: _widths[n]); + final childConstraints = + BoxConstraints.tightFor(width: spannedWidths[n]); child.layout(context, childConstraints); assert(child.box != null); child.box = PdfRect(x, totalHeight, child.box!.width, child.box!.height); - x += _widths[n]!; + x += spannedWidths[n]!; lineHeight = math.max(lineHeight, child.box!.height); n++; } @@ -428,13 +441,13 @@ class Table extends Widget with SpanningWidget { n = 0; x = 0; for (final child in row.children) { - final childConstraints = - BoxConstraints.tightFor(width: _widths[n], height: lineHeight); + final childConstraints = BoxConstraints.tightFor( + width: spannedWidths[n], height: lineHeight); child.layout(context, childConstraints); assert(child.box != null); child.box = PdfRect(x, totalHeight, child.box!.width, child.box!.height); - x += _widths[n]!; + x += spannedWidths[n]!; n++; } } @@ -527,14 +540,36 @@ class Table extends Widget with SpanningWidget { ); } - for (final child in row.children) { + for (final cell in row.children) { + final cellBox = cell.box!; context.canvas ..saveContext() - ..drawRect( - child.box!.x, child.box!.y, child.box!.width, child.box!.height) + ..drawRect(cellBox.x, cellBox.y, cellBox.width, cellBox.height) ..clipPath(); - child.paint(context); + cell.paint(context); context.canvas.restoreContext(); + if (border?.verticalInside.style.paint == true && + cell != row.children.first) { + border!.verticalInside.style.setStyle(context); + + context.canvas.moveTo(cellBox.x, cellBox.bottom); + context.canvas.lineTo(cellBox.x, cellBox.top); + context.canvas.setStrokeColor(border!.verticalInside.color); + context.canvas.setLineWidth(border!.verticalInside.width); + context.canvas.strokePath(); + + border!.verticalInside.style.unsetStyle(context); + } + if (border?.horizontalInside.style.paint == true && + row != children.first) { + border!.horizontalInside.style.setStyle(context); + context.canvas.moveTo(cellBox.left, cellBox.top); + context.canvas.lineTo(cellBox.right, cellBox.top); + context.canvas.setStrokeColor(border!.horizontalInside.color); + context.canvas.setLineWidth(border!.horizontalInside.width); + context.canvas.strokePath(); + border!.horizontalInside.style.unsetStyle(context); + } } if (index >= _context.lastLine) { break; @@ -568,8 +603,9 @@ class Table extends Widget with SpanningWidget { context.canvas.restoreContext(); + // Paint outside borders if (border != null) { - border!.paintTable(context, box!, _widths, _heights); + border!.paint(context, box!); } } diff --git a/pdf/test/widget_table_test.dart b/pdf/test/widget_table_test.dart index b4e36b0f..73748dad 100644 --- a/pdf/test/widget_table_test.dart +++ b/pdf/test/widget_table_test.dart @@ -25,8 +25,11 @@ import 'utils.dart'; late Document pdf; -List buildTable( - {required Context? context, int count = 10, bool repeatHeader = false}) { +List buildTable({ + required Context? context, + int count = 10, + bool repeatHeader = false, +}) { final rows = []; { final tableRow = []; @@ -148,6 +151,48 @@ void main() { )); }); + test('Table Widget Column Span', () { + pdf.addPage(Page( + build: (Context context) => Table( + children: [ + TableRow( + columnSpans: const {0: 2, 2: 1}, + children: [ + Container(color: PdfColors.red, height: 20), + Container(color: PdfColors.green, height: 20), + ], + ), + TableRow( + columnSpans: const {1: 2}, + children: [ + Container(color: PdfColors.green, height: 20), + Container(color: PdfColors.blue, height: 20), + ], + ), + TableRow( + columnSpans: const {0: 3}, + children: [ + Container(color: PdfColors.red, height: 20), + ], + ), + TableRow( + children: [ + Container(color: PdfColors.red, height: 20), + Container(color: PdfColors.blue, height: 20), + Container(color: PdfColors.green, height: 20), + ], + ), + ], + border: TableBorder.all(), + columnWidths: { + 0: const FixedColumnWidth(80), + 1: const FlexColumnWidth(2), + 2: const FractionColumnWidth(.2), + }, + ), + )); + }); + test('Table Widget TableCellVerticalAlignment', () { pdf.addPage( MultiPage( From 08e62e65f6764c6eea4d0114d35e8b6a6217b885 Mon Sep 17 00:00:00 2001 From: Gustl22 Date: Thu, 19 Sep 2024 20:06:59 +0200 Subject: [PATCH 02/11] fix cell border height --- pdf/CHANGELOG.md | 4 ++++ pdf/lib/src/widgets/table.dart | 7 ++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/pdf/CHANGELOG.md b/pdf/CHANGELOG.md index 05c0c04e..3882e173 100644 --- a/pdf/CHANGELOG.md +++ b/pdf/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## Unreleased + +- Add support for table column spans [gustl22] + ## 3.11.1 - Fixed display problems with textfields [ilaurillard] diff --git a/pdf/lib/src/widgets/table.dart b/pdf/lib/src/widgets/table.dart index 6ec895e7..6c445f0d 100644 --- a/pdf/lib/src/widgets/table.dart +++ b/pdf/lib/src/widgets/table.dart @@ -521,6 +521,7 @@ class Table extends Widget with SpanningWidget { ..setTransform(mat); var index = 0; + var heightIndex = 0; for (final row in children) { if (index++ < _context.firstLine && !row.repeat) { continue; @@ -552,7 +553,10 @@ class Table extends Widget with SpanningWidget { cell != row.children.first) { border!.verticalInside.style.setStyle(context); - context.canvas.moveTo(cellBox.x, cellBox.bottom); + // Use the height of the current row to determine the bottom of box, + // otherwise it will draw gaps for cells which have a smaller height. + context.canvas + .moveTo(cellBox.x, cellBox.top - _getHeight(heightIndex)); context.canvas.lineTo(cellBox.x, cellBox.top); context.canvas.setStrokeColor(border!.verticalInside.color); context.canvas.setLineWidth(border!.verticalInside.width); @@ -574,6 +578,7 @@ class Table extends Widget with SpanningWidget { if (index >= _context.lastLine) { break; } + heightIndex++; } index = 0; From ace3ac806006761ccce8b0ad01963913fcf7bd5c Mon Sep 17 00:00:00 2001 From: Gustl22 Date: Thu, 19 Sep 2024 21:09:53 +0200 Subject: [PATCH 03/11] feat: Table cell --- pdf/CHANGELOG.md | 2 +- pdf/lib/src/widgets/table.dart | 317 ++++++++++++++++++++------------ pdf/pubspec.yaml | 2 +- pdf/test/widget_table_test.dart | 126 ++++++++----- 4 files changed, 286 insertions(+), 161 deletions(-) diff --git a/pdf/CHANGELOG.md b/pdf/CHANGELOG.md index 3882e173..b7443de6 100644 --- a/pdf/CHANGELOG.md +++ b/pdf/CHANGELOG.md @@ -2,7 +2,7 @@ ## Unreleased -- Add support for table column spans [gustl22] +- Add support for table spans [gustl22] ## 3.11.1 diff --git a/pdf/lib/src/widgets/table.dart b/pdf/lib/src/widgets/table.dart index 6c445f0d..c05d23ed 100644 --- a/pdf/lib/src/widgets/table.dart +++ b/pdf/lib/src/widgets/table.dart @@ -30,7 +30,6 @@ class TableRow { this.repeat = false, this.verticalAlignment, this.decoration, - this.columnSpans, }); /// The widgets that comprise the cells in this row. @@ -42,8 +41,25 @@ class TableRow { final BoxDecoration? decoration; final TableCellVerticalAlignment? verticalAlignment; +} + +class TableCell extends StatelessWidget { + TableCell({ + required this.child, + this.columnSpan = 1, + this.rowSpan = 1, + }) : assert(columnSpan >= 1, 'A table cell must at least span one column'), + assert(rowSpan >= 1, 'A table cell must at least span one row'); + + final Widget child; - final Map? columnSpans; + final int columnSpan; + final int rowSpan; + + @override + Widget build(Context context) { + return child; + } } enum TableCellVerticalAlignment { bottom, middle, top, full } @@ -302,73 +318,104 @@ class Table extends Widget with SpanningWidget { _context.firstLine = _context.lastLine; } - List _getFilledChildrenFromColumnSpans(TableRow row) { - if (row.columnSpans == null) { - return row.children; - } - final filledChildren = []; - var n = 0; - // TODO(Gustl22): Handle intrinsic column widths: - // Currently, every cell is calculated by filling the remaining spanned - // cells with empty containers and then sum up their calculated widths. - for (final child in row.children) { - // Columns, which are currently spanned. - final columnSpan = row.columnSpans![n] ?? 1; - filledChildren.add(child); - if (columnSpan > 1) { - filledChildren - .addAll(Iterable.generate(columnSpan - 1, (index) => Container())); + /// Get column and row spans of the table per unspanned cell (col-span, row-span). + /// Also provide the according index of a spanned cell in [children], if present. + List> _getTableSpanMatrix() { + final tableSpans = >[]; + var previousSpansOfRow = <(int, int, int?)>[]; + for (final row in children) { + var unspannedColIndex = 0; + final spansOfRow = <(int, int, int?)>[]; + for (var spannedColIndex = 0; + spannedColIndex < row.children.length; + spannedColIndex++) { + final child = row.children[spannedColIndex]; + if (previousSpansOfRow.length > unspannedColIndex) { + final (previousColSpan, previousRowSpan, previousCell) = + previousSpansOfRow[unspannedColIndex]; + if (previousRowSpan > 1) { + // Add cell spans from previous row + for (var colSpan = previousColSpan; colSpan > 0; colSpan--) { + spansOfRow.add((colSpan, previousRowSpan - 1, null)); + unspannedColIndex++; + } + } + } + if (child is TableCell) { + for (var colSpan = child.columnSpan; colSpan > 0; colSpan--) { + // Define col and row span for this and remember for the following rows, on each column + spansOfRow.add(( + colSpan, + child.rowSpan, + colSpan == child.columnSpan ? spannedColIndex : null + )); + unspannedColIndex++; + } + } else { + // Just a regular cell + spansOfRow.add((1, 1, spannedColIndex)); + unspannedColIndex++; + } } - n += columnSpan; + tableSpans.add(spansOfRow); + previousSpansOfRow = spansOfRow; } - return filledChildren; + return tableSpans; } - List _getSpannedWidths(List widths, TableRow row) { - final spannedWidths = []; - var n = 0; - for (var i = 0; i < row.children.length; i++) { - final columnSpan = row.columnSpans?[n] ?? 1; - final indices = Iterable.generate(columnSpan, (span) => n + span); - final width = indices.fold(null, (prev, curIndex) { - final current = widths[curIndex]; - if (prev == null && current == null) { - return null; - } - return (prev ?? 0) + (current ?? 0); - }); - spannedWidths.add(width); - n += columnSpan; - } - return spannedWidths; + double? _getSpannedWidth(int colIndex, int colSpan, List widths) { + final indices = Iterable.generate(colSpan, (span) => colIndex + span); + return indices.fold(null, (prev, curIndex) { + final current = widths[curIndex]; + if (prev == null && current == null) { + return null; + } + return (prev ?? 0) + (current ?? 0); + }); } @override - void layout(Context context, BoxConstraints constraints, - {bool parentUsesSize = false}) { + void layout( + Context context, + BoxConstraints constraints, { + bool parentUsesSize = false, + }) { // Compute required width for all row/columns width flex final flex = []; final widths = []; _heights.clear(); var index = 0; - - for (final row in children) { - var n = 0; - for (final child in _getFilledChildrenFromColumnSpans(row)) { - final columnWidth = columnWidths != null && columnWidths![n] != null - ? columnWidths![n]! - : defaultColumnWidth; - final columnLayout = columnWidth.layout(child, context, constraints); - if (flex.length < n + 1) { + final tableCells = _getTableSpanMatrix(); + for (var rowIndex = 0; rowIndex < tableCells.length; rowIndex++) { + final unspannedRow = tableCells[rowIndex]; + for (var unspannedColIndex = 0; + unspannedColIndex < unspannedRow.length; + unspannedColIndex++) { + final spannedColIndex = unspannedRow[unspannedColIndex].$3; + final columnWidth = + columnWidths != null && columnWidths![unspannedColIndex] != null + ? columnWidths![unspannedColIndex]! + : defaultColumnWidth; + // TODO(Gustl22): Handle intrinsic column widths: + // Currently, every cell is calculated by filling the remaining spanned + // cells with empty containers and then sum up their calculated widths. + final columnLayout = columnWidth.layout( + spannedColIndex == null + ? Container() + : children[rowIndex].children[spannedColIndex], + context, + constraints); + if (flex.length < unspannedColIndex + 1) { flex.add(columnLayout.flex); widths.add(columnLayout.width); } else { if (columnLayout.flex! > 0) { - flex[n] = math.max(flex[n]!, columnLayout.flex!); + flex[unspannedColIndex] = + math.max(flex[unspannedColIndex]!, columnLayout.flex!); } - widths[n] = math.max(widths[n]!, columnLayout.width!); + widths[unspannedColIndex] = + math.max(widths[unspannedColIndex]!, columnLayout.width!); } - n++; } } @@ -407,48 +454,73 @@ class Table extends Widget with SpanningWidget { final totalWidth = widths.reduce((double? a, double? b) => a! + b!)!; - // Compute final widths + // Compute final widths and heights var totalHeight = 0.0; index = 0; - for (final row in children) { + + // Store the currently maximum mean height of spanned rows + final meanRowSpanLineHeights = {}; + for (var rowIndex = 0; rowIndex < children.length; rowIndex++) { + final row = children[rowIndex]; if (index++ < _context.firstLine && !row.repeat) { continue; } - final spannedWidths = _getSpannedWidths(widths, row); - - var n = 0; - var x = 0.0; - var lineHeight = 0.0; + final unspannedRow = tableCells[rowIndex]; + var x = 0.0; + for (var colIndex = 0; colIndex < unspannedRow.length; colIndex++) { + final (colSpan, rowSpan, spannedColIndex) = unspannedRow[colIndex]; + + if (meanRowSpanLineHeights.isNotEmpty) { + // Get the maximum of the mean cell line heights, which are spanning over multiple rows. + lineHeight = math.max( + lineHeight, meanRowSpanLineHeights.values.reduce(math.max)); + if (meanRowSpanLineHeights[colIndex] != null && rowSpan <= 1) { + // Remove mean row span height when was applied last. + meanRowSpanLineHeights.remove(colIndex); + } + } - for (final child in row.children) { - final childConstraints = - BoxConstraints.tightFor(width: spannedWidths[n]); - child.layout(context, childConstraints); - assert(child.box != null); - child.box = - PdfRect(x, totalHeight, child.box!.width, child.box!.height); - x += spannedWidths[n]!; - lineHeight = math.max(lineHeight, child.box!.height); - n++; + if (spannedColIndex != null) { + final cell = children[rowIndex].children[spannedColIndex]; + assert(colSpan >= 1); + final spannedWidth = _getSpannedWidth(colIndex, colSpan, widths); + final childConstraints = BoxConstraints.tightFor(width: spannedWidth); + cell.layout(context, childConstraints); + assert(cell.box != null); + cell.box = cell.box!.copyWith(x: x, y: totalHeight); + + assert(rowSpan >= 1); + final rowLineHeight = cell.box!.height / rowSpan; + if (rowSpan > 1) { + // Define row line height, if cell is spanning over multiple rows + meanRowSpanLineHeights[colIndex] = rowLineHeight; + } + lineHeight = math.max(lineHeight, rowLineHeight); + } + assert(widths[colIndex]! > 0.0); + x += widths[colIndex]!; } final align = row.verticalAlignment ?? defaultVerticalAlignment; if (align == TableCellVerticalAlignment.full) { // Compute the layout again to give the full height to all cells - n = 0; + // Need to compute the width also again, just in case height had an impact on intrinsic width. x = 0; - for (final child in row.children) { - final childConstraints = BoxConstraints.tightFor( - width: spannedWidths[n], height: lineHeight); - child.layout(context, childConstraints); - assert(child.box != null); - child.box = - PdfRect(x, totalHeight, child.box!.width, child.box!.height); - x += spannedWidths[n]!; - n++; + for (var colIndex = 0; colIndex < unspannedRow.length; colIndex++) { + final (colSpan, rowSpan, spannedColIndex) = unspannedRow[colIndex]; + if (spannedColIndex != null) { + final cell = children[rowIndex].children[spannedColIndex]; + final spannedWidth = _getSpannedWidth(colIndex, colSpan, widths); + final childConstraints = BoxConstraints.tightFor( + width: spannedWidth, height: lineHeight); + cell.layout(context, childConstraints); + assert(cell.box != null); + cell.box = cell.box!.copyWith(x: x, y: totalHeight); + } + x += widths[colIndex]!; } } @@ -463,8 +535,8 @@ class Table extends Widget with SpanningWidget { // Compute final y position index = 0; - var heightIndex = 0; - for (final row in children) { + for (var rowIndex = 0; rowIndex < children.length; rowIndex++) { + final row = children[rowIndex]; if (index++ < _context.firstLine && !row.repeat) { continue; } @@ -476,12 +548,12 @@ class Table extends Widget with SpanningWidget { switch (align) { case TableCellVerticalAlignment.bottom: - childY = totalHeight - child.box!.y - _getHeight(heightIndex); + childY = totalHeight - child.box!.y - _getHeight(rowIndex); break; case TableCellVerticalAlignment.middle: childY = totalHeight - child.box!.y - - (_getHeight(heightIndex) + child.box!.height) / 2; + (_getHeight(rowIndex) + child.box!.height) / 2; break; case TableCellVerticalAlignment.top: case TableCellVerticalAlignment.full: @@ -489,18 +561,12 @@ class Table extends Widget with SpanningWidget { break; } - child.box = PdfRect( - child.box!.x, - childY, - child.box!.width, - child.box!.height, - ); + child.box = child.box!.copyWith(y: childY); } if (index >= _context.lastLine) { break; } - heightIndex++; } box = PdfRect(0, 0, totalWidth, totalHeight); @@ -521,7 +587,6 @@ class Table extends Widget with SpanningWidget { ..setTransform(mat); var index = 0; - var heightIndex = 0; for (final row in children) { if (index++ < _context.firstLine && !row.repeat) { continue; @@ -549,36 +614,10 @@ class Table extends Widget with SpanningWidget { ..clipPath(); cell.paint(context); context.canvas.restoreContext(); - if (border?.verticalInside.style.paint == true && - cell != row.children.first) { - border!.verticalInside.style.setStyle(context); - - // Use the height of the current row to determine the bottom of box, - // otherwise it will draw gaps for cells which have a smaller height. - context.canvas - .moveTo(cellBox.x, cellBox.top - _getHeight(heightIndex)); - context.canvas.lineTo(cellBox.x, cellBox.top); - context.canvas.setStrokeColor(border!.verticalInside.color); - context.canvas.setLineWidth(border!.verticalInside.width); - context.canvas.strokePath(); - - border!.verticalInside.style.unsetStyle(context); - } - if (border?.horizontalInside.style.paint == true && - row != children.first) { - border!.horizontalInside.style.setStyle(context); - context.canvas.moveTo(cellBox.left, cellBox.top); - context.canvas.lineTo(cellBox.right, cellBox.top); - context.canvas.setStrokeColor(border!.horizontalInside.color); - context.canvas.setLineWidth(border!.horizontalInside.width); - context.canvas.strokePath(); - border!.horizontalInside.style.unsetStyle(context); - } } if (index >= _context.lastLine) { break; } - heightIndex++; } index = 0; @@ -606,10 +645,54 @@ class Table extends Widget with SpanningWidget { } } + if (border != null) { + // Paint inside borders + final tableCells = _getTableSpanMatrix(); + index = 0; + for (var rowIndex = 0; rowIndex < children.length; rowIndex++) { + final row = children[rowIndex]; + if (index++ < _context.firstLine && !row.repeat) { + continue; + } + + for (var spannedColIndex = 0; + spannedColIndex < row.children.length; + spannedColIndex++) { + final cellBox = row.children[spannedColIndex].box!; + if (border!.verticalInside.style.paint && + spannedColIndex != tableCells[rowIndex].first.$3) { + border!.verticalInside.style.setStyle(context); + + // Use the height of the current row to determine the bottom of box, + // otherwise it will draw gaps for cells which have a smaller height. + // Or use height, if cell spans over multiple rows. + context.canvas.moveTo(cellBox.x, + cellBox.top - math.max(_getHeight(rowIndex), cellBox.height)); + context.canvas.lineTo(cellBox.x, cellBox.top); + context.canvas.setStrokeColor(border!.verticalInside.color); + context.canvas.setLineWidth(border!.verticalInside.width); + context.canvas.strokePath(); + border!.verticalInside.style.unsetStyle(context); + } + if (border!.horizontalInside.style.paint && row != children.first) { + border!.horizontalInside.style.setStyle(context); + context.canvas.moveTo(cellBox.left, cellBox.top); + context.canvas.lineTo(cellBox.right, cellBox.top); + context.canvas.setStrokeColor(border!.horizontalInside.color); + context.canvas.setLineWidth(border!.horizontalInside.width); + context.canvas.strokePath(); + border!.horizontalInside.style.unsetStyle(context); + } + } + if (index >= _context.lastLine) { + break; + } + } + } context.canvas.restoreContext(); - // Paint outside borders if (border != null) { + // Paint outside border border!.paint(context, box!); } } diff --git a/pdf/pubspec.yaml b/pdf/pubspec.yaml index 2cacc857..6904b453 100644 --- a/pdf/pubspec.yaml +++ b/pdf/pubspec.yaml @@ -15,7 +15,7 @@ topics: version: 3.11.1 environment: - sdk: ">=2.19.0 <4.0.0" + sdk: ">=3.0.0 <4.0.0" dependencies: archive: ^3.4.0 diff --git a/pdf/test/widget_table_test.dart b/pdf/test/widget_table_test.dart index 73748dad..a50f266c 100644 --- a/pdf/test/widget_table_test.dart +++ b/pdf/test/widget_table_test.dart @@ -151,48 +151,6 @@ void main() { )); }); - test('Table Widget Column Span', () { - pdf.addPage(Page( - build: (Context context) => Table( - children: [ - TableRow( - columnSpans: const {0: 2, 2: 1}, - children: [ - Container(color: PdfColors.red, height: 20), - Container(color: PdfColors.green, height: 20), - ], - ), - TableRow( - columnSpans: const {1: 2}, - children: [ - Container(color: PdfColors.green, height: 20), - Container(color: PdfColors.blue, height: 20), - ], - ), - TableRow( - columnSpans: const {0: 3}, - children: [ - Container(color: PdfColors.red, height: 20), - ], - ), - TableRow( - children: [ - Container(color: PdfColors.red, height: 20), - Container(color: PdfColors.blue, height: 20), - Container(color: PdfColors.green, height: 20), - ], - ), - ], - border: TableBorder.all(), - columnWidths: { - 0: const FixedColumnWidth(80), - 1: const FlexColumnWidth(2), - 2: const FractionColumnWidth(.2), - }, - ), - )); - }); - test('Table Widget TableCellVerticalAlignment', () { pdf.addPage( MultiPage( @@ -314,6 +272,90 @@ void main() { ); }); + test('Table Widget Span', () { + Widget _buildSpanCell({ + int columnSpan = 1, + int rowSpan = 1, + PdfColor? color, + double? height, + }) { + return TableCell( + child: Container( + color: color, + height: height, + child: Text( + 'colSpan: $columnSpan, rowSpan: $rowSpan, height: $height')), + columnSpan: columnSpan, + rowSpan: rowSpan, + ); + } + + pdf.addPage(Page( + build: (Context context) => Table( + children: [ + TableRow( + children: [ + Container(color: PdfColors.blue, height: 20), + Container(color: PdfColors.red, height: 20), + Container(color: PdfColors.green, height: 30), + ], + ), + TableRow( + children: [ + _buildSpanCell(columnSpan: 2, color: PdfColors.red, height: 20), + Container(color: PdfColors.blue, height: 20), + ], + ), + TableRow( + children: [ + Container(color: PdfColors.green, height: 20), + _buildSpanCell(columnSpan: 2, color: PdfColors.blue, height: 20), + ], + ), + TableRow( + children: [ + _buildSpanCell(columnSpan: 3, color: PdfColors.blue, height: 20), + ], + ), + TableRow( + children: [ + Container(color: PdfColors.red, height: 20), + _buildSpanCell( + columnSpan: 2, + rowSpan: 2, + color: PdfColors.green, + height: 60, + ), + ], + ), + TableRow( + children: [ + _buildSpanCell(rowSpan: 2, color: PdfColors.green, height: 40), + ], + ), + TableRow( + children: [ + Container(color: PdfColors.blue, height: 20), + _buildSpanCell(rowSpan: 2, color: PdfColors.red), + ], + ), + TableRow( + children: [ + Container(color: PdfColors.red, height: 20), + Container(color: PdfColors.green, height: 20), + ], + ), + ], + border: TableBorder.all(), + columnWidths: { + 0: const FixedColumnWidth(80), + 1: const FlexColumnWidth(2), + 2: const FractionColumnWidth(.2), + }, + ), + )); + }); + tearDownAll(() async { final file = File('widgets-table.pdf'); await file.writeAsBytes(await pdf.save()); From bcae5e015fb3a912c523dc784c6cd10e8a79e028 Mon Sep 17 00:00:00 2001 From: Gustl22 Date: Mon, 30 Sep 2024 23:58:49 +0200 Subject: [PATCH 04/11] fix multi page indexes --- pdf/lib/src/widgets/table.dart | 74 +++++++++++++++++----------------- 1 file changed, 38 insertions(+), 36 deletions(-) diff --git a/pdf/lib/src/widgets/table.dart b/pdf/lib/src/widgets/table.dart index c05d23ed..4f7f3b2d 100644 --- a/pdf/lib/src/widgets/table.dart +++ b/pdf/lib/src/widgets/table.dart @@ -113,8 +113,11 @@ class TableBorder extends Border { } class TableContext extends WidgetContext { + /// First line to be rendered (inclusive). int firstLine = 0; - int lastLine = 0; + + /// Last line to be rendered (exclusive). + int lastLine = 1; @override void apply(TableContext other) { @@ -384,7 +387,7 @@ class Table extends Widget with SpanningWidget { final flex = []; final widths = []; _heights.clear(); - var index = 0; + final tableCells = _getTableSpanMatrix(); for (var rowIndex = 0; rowIndex < tableCells.length; rowIndex++) { final unspannedRow = tableCells[rowIndex]; @@ -456,13 +459,12 @@ class Table extends Widget with SpanningWidget { // Compute final widths and heights var totalHeight = 0.0; - index = 0; // Store the currently maximum mean height of spanned rows final meanRowSpanLineHeights = {}; for (var rowIndex = 0; rowIndex < children.length; rowIndex++) { final row = children[rowIndex]; - if (index++ < _context.firstLine && !row.repeat) { + if (rowIndex < _context.firstLine && !row.repeat) { continue; } @@ -525,19 +527,21 @@ class Table extends Widget with SpanningWidget { } if (totalHeight + lineHeight > constraints.maxHeight) { - index--; + _context.lastLine = rowIndex; break; + } else { + _context.lastLine = rowIndex + 1; } totalHeight += lineHeight; _heights.add(lineHeight); } - _context.lastLine = index; // Compute final y position - index = 0; - for (var rowIndex = 0; rowIndex < children.length; rowIndex++) { + for (var rowIndex = 0; + rowIndex < children.length && rowIndex < _context.lastLine; + rowIndex++) { final row = children[rowIndex]; - if (index++ < _context.firstLine && !row.repeat) { + if (rowIndex < _context.firstLine && !row.repeat) { continue; } @@ -548,12 +552,16 @@ class Table extends Widget with SpanningWidget { switch (align) { case TableCellVerticalAlignment.bottom: - childY = totalHeight - child.box!.y - _getHeight(rowIndex); + childY = totalHeight - + child.box!.y - + _getHeight(rowIndex - _context.firstLine); break; case TableCellVerticalAlignment.middle: childY = totalHeight - child.box!.y - - (_getHeight(rowIndex) + child.box!.height) / 2; + (_getHeight(rowIndex - _context.firstLine) + + child.box!.height) / + 2; break; case TableCellVerticalAlignment.top: case TableCellVerticalAlignment.full: @@ -563,10 +571,6 @@ class Table extends Widget with SpanningWidget { child.box = child.box!.copyWith(y: childY); } - - if (index >= _context.lastLine) { - break; - } } box = PdfRect(0, 0, totalWidth, totalHeight); @@ -586,9 +590,11 @@ class Table extends Widget with SpanningWidget { ..saveContext() ..setTransform(mat); - var index = 0; - for (final row in children) { - if (index++ < _context.firstLine && !row.repeat) { + for (var rowIndex = 0; + rowIndex < children.length && rowIndex < _context.lastLine; + rowIndex++) { + final row = children[rowIndex]; + if (rowIndex < _context.firstLine && !row.repeat) { continue; } @@ -615,14 +621,13 @@ class Table extends Widget with SpanningWidget { cell.paint(context); context.canvas.restoreContext(); } - if (index >= _context.lastLine) { - break; - } } - index = 0; - for (final row in children) { - if (index++ < _context.firstLine && !row.repeat) { + for (var rowIndex = 0; + rowIndex < children.length && rowIndex < _context.lastLine; + rowIndex++) { + final row = children[rowIndex]; + if (rowIndex < _context.firstLine && !row.repeat) { continue; } @@ -639,19 +644,16 @@ class Table extends Widget with SpanningWidget { PaintPhase.foreground, ); } - - if (index >= _context.lastLine) { - break; - } } if (border != null) { // Paint inside borders final tableCells = _getTableSpanMatrix(); - index = 0; - for (var rowIndex = 0; rowIndex < children.length; rowIndex++) { + for (var rowIndex = 0; + rowIndex < children.length && rowIndex < _context.lastLine; + rowIndex++) { final row = children[rowIndex]; - if (index++ < _context.firstLine && !row.repeat) { + if (rowIndex < _context.firstLine && !row.repeat) { continue; } @@ -666,8 +668,11 @@ class Table extends Widget with SpanningWidget { // Use the height of the current row to determine the bottom of box, // otherwise it will draw gaps for cells which have a smaller height. // Or use height, if cell spans over multiple rows. - context.canvas.moveTo(cellBox.x, - cellBox.top - math.max(_getHeight(rowIndex), cellBox.height)); + context.canvas.moveTo( + cellBox.x, + cellBox.top - + math.max(_getHeight(rowIndex - _context.firstLine), + cellBox.height)); context.canvas.lineTo(cellBox.x, cellBox.top); context.canvas.setStrokeColor(border!.verticalInside.color); context.canvas.setLineWidth(border!.verticalInside.width); @@ -684,9 +689,6 @@ class Table extends Widget with SpanningWidget { border!.horizontalInside.style.unsetStyle(context); } } - if (index >= _context.lastLine) { - break; - } } } context.canvas.restoreContext(); From 6dcd7487cf22760a771553f479fbe4fead1f4a6e Mon Sep 17 00:00:00 2001 From: Gustl22 Date: Tue, 1 Oct 2024 00:13:01 +0200 Subject: [PATCH 05/11] update goldens --- test/golden/widgets-table.pdf | Bin 69353 -> 78588 bytes test/golden/widgets-theme.pdf | Bin 14342 -> 14352 bytes test/golden/widgets.pdf | Bin 28825 -> 28837 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/test/golden/widgets-table.pdf b/test/golden/widgets-table.pdf index b9115a325835753f22420eee8c1b3de8839ff916..f364ece49483a909d57756ec13574e35330073ec 100644 GIT binary patch literal 78588 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

UQI^FrWg3uA1JaDeK6Uz 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 TO<({V8~^|e8JUQzD9rx@=I7b(%s0D# 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 IRAf>A2MWT4$N&HU diff --git a/test/golden/widgets.pdf b/test/golden/widgets.pdf index 27d6ad6d541f323ec90fba1fcef782d4d147fe33..54b7299a26fd6ab31f5331beea4cbf822c2e68f6 100644 GIT binary patch delta 22895 zcmZ5{V{o9svUbdk?POyo8{4*R+r}H)wrv|5dy{OEjW)Jz-95K%eRb;l*Histrk?KU z>FItta|g6^2eg3`6rPodi-qaO4<=St_GS@KR&aomjf0=x#nsu&$PUgk=R!}Wexn27 zllBwbh+0XZ;J8STM=+4VoI(&w46Bo40z^#Luqm_OK=IE)njf9dFKfi4?Z3wfDOTBw zW8tn&ug`wMbJEeU1Gr`{D&8pzPX-h@j#-qU?=SSe();}*w z|9z;{^(R{bEQ_r2EKw`G*`P|x$YfBt z(MhYk7D(Dscdz61lHYUCU}lnCC+lgp45md5X)kcOg0S+*#nx~nzcty$(j4nxsi}?NXK0ho((Ico(5|Nciio`{OBOV#QUY_Gm9EghN z^8L3fH}2Q(O+N2zKH@CEQ=!JO@mqnLg(6&wW;1S!J0$Y_wii0;m3Q?^*zEL_4DVnL zTYY2H9+Nxih8b!d95NJ`=s$8q5Sq1o>w97Ua1aiJhkB~bs-M$>CM>O!+tfnVm#MN? zNtg+($uj!8c~`n8im9rZ=KWYlR)C%qoA{iI`YX5nX_{^T&L6fJ2EKyz;R48&?P;;S ziWBrfJ@jCDs(Fg*Y>w=V4qbD zhM4Doz4UW{3YjXUX4s+PP#92~AZovM-QY|FH>tVS15ZDxQ3UOstUq=GMs{Wl?N31&5ewXi-ys% zQ&cej(9KML?*TEpAI>cbeNB6v_+y*rZn1iB^_}Wqt_7)uQsQd|vcD2r> z=8cJ-wxLACzNZAX1q+~;TcH^fMSIiA z3%Ow%D6-*K?SQ0E58wkO`Qp_kicZ9>QA=vM6;*dFhmDB z`KbINoX86n2k8THSc&oeN8HH(UtHoBWt{9N!eP?MddeIAE%(r{%k2;7AL^b0D*e}= zkUfkm7toekBe$kPl2!x?Mv=la_97e_uEIgW=&q}4QO_nWXupH+yj#=qo7#J%eTWMY z2+DqEfd~dl6ax88(k@B7E7|qNwyj`a5Hyxq1N{)9X74-Fb_2;pG*4H^DQ>&Ar~UAs zX0)tA2%ROb!9$Y2L?~7UP~@u<9t^?xrQxg~sxbvFF}ery#M6F4320T}ln909*H@eB z(YA^!&{U!9;h@UIG(V3FaF#u{yg5ySYwaE^Std`B5;7w}Xu@WfcM=lBBWYI=Jhm zJ)1<^0IMqnFV5ihyYKscCv1?Y(wKIG_C}Ot2e%GOx;OSbEnT|3EWoU>~X-X zdf1I@uK?xaJ)gpX^D zRo!7CGqSlrqQ~;oP2;PNKDJYf?ju66s z?3A;*mpS#h=7zMd&&s|-d(4F<*ACx{x_W_OvrTwLN>@L2A|CCcMhSEi)bS!OA!$JA z?bGU7bw{xtt33=jZ8cqItw*6#_eCKr=~jdw`rmq62x9i7OSiz)XrblElHbno=5Hr3 zC<=g^W~}^5=XTuWFaxBEsqe){DX2E%I#s0~T?&)~^i%PCdo(zT&=%lo7w{a^TyNW0 zzlX_bl+7QjrX*cFx~DkPRT7oPc*Sa@DF2dloMc-?5ZhVID}_gCMV^X;r(e|_4}o&X z?b{5?2qogMPKIbbQO7@B_=Wn*oCDwRSjSgA`%$N{C&7?cD-hVu-5{ClB5dJBp64Hz zeTUPogP`w;RB+DrC1|-mgg_MMC)S+hxYY^&m*PMMvV_@-(rdj3SBOa`l!T`psVx?f zWiV|A3XAO-?e7ZmxZNxUCa+_1S??&=cO3yZJoW1KWi^=V>=1ZB+lxd_qpRJv z(bMR{8pzVRwgMwO_e51o_VMjAy96n>6b?%foRa~3A>RpwRGOJpuG=QF-}rj$OaE-( zU7`3qKil%>ju4Nqptrm8xO)*-5p{p_p42%1J<9OiUZlnt3-q`bj#|a47wI6K?H>#s z)mmtJSHa_h@dGdpDKap1 zHGYOO*jK{Lv z;;DAB4LsBcOSeGDsv=~VN4;-uQww#MC3up|P^$$S5I2d(L4s5k;6xNYhEY5dr@6Xh zGd8AmNu`}hgcaj>Rww6ISBknJw$>Lhqh?N9pbo0bbu$_0->(2QmfCsPa5RDNG6@f6P~6CC~lC zw(Nhg)lvC}EycHo*lSt>SIghHKm$cgYvSJ$`UK(3<9&BKq}}&H-Zai(8eA=c+`$ePVO}9v>YbI>JbCTD@hCNwTMU{TASopxOWWk*` z8oiwtPPNMr)By30gYnWdYX()}Kw`hWm=wBq&pvdRdx(W3n4^ToAZb0NqMnCY3=LIHPx%5 zXI`j39>mu$(gJ}+HoI61L<0w-qZdJ0Rk;8USbdTu>_*+=-i z$I&K0jo0pst~91{Q%KD^0FOVw@k&P(xkk%k{wDRVo*!hHtUMRYHHi3nlv4$|$O&}n zA$E4Q&QzmlVc{Pn6(S&fGpPQIK`USI@E1{yotmm|d{Ym(p1O6pTArDH*yg9aoKA(} z_}0637S7d;)j74obMKweEQ{k$zRduCd6Fs-k3KcF65IT!wr+7j0OWD}(w@P+oZ?5j zv`UviYMFu#`sQ*;)jqq%6>6H%oX7e%&5z>zEDah-bqbG00;fCbg5{r!#Qjibx&2tN z80b^?x)!Yd+sQY%vSgj#xIoK4sW~&=ZjulArhPB~UhBL!MrEQ=?Kdi4Jwau{M!FT} zhk0(33LXD02o_x&!=qRGh{FSWp)_hO-be68x3XLXI>Dp8!z7`R>o>~njD1j12Dj;w zelP}G{v~hyYVkG_Y_RPfHU@W)lKx2yYAuOaK#kz zSAxF)NA{9^LN3Z#BF7mL3^N0)JaZ8p^*b^uCl%Cb3!HkjId-c^W(*4y6DW0Pn=-#S zzKx(@RZ`ivJ=Y5QHf5Vmq3AS}QQVrJ|D(++=TGo69AuJPhvC z@s+bpjMJQixY7G2mE0ipjz7~DeVmSdAC1)@YAxEo0uRGifhjXb$5y1UqNiDYR@1qv zO!X7?CqjFvg|kqrTL{QszQX2j7b^;;zh&bRY+4fSiyh{eckFkZ3KcrwqDTZ?r6q`e zhEY?uQ%R~8xC7x-D*>mTtplpR=YD=OAGY>2!juou@|4VAac>EJ+|N&m^W|z6dB=;t_l4pcYHzTByTF$*YdgpGVl;<~&-VNMIjD|!L9PcN=0NX~y^74|pC}~p( zF@9x%8{D9i9yz0{{c4Z*OxlbM#6*v2+*Ma!tSrf3-PyXOt>YK14>UCNV^)5~)jjGP zV}!JI9vje4*RYJVf;&Q2l#yRG=gS{}e6&9?GIBr|K6FBN=fz7$#!Q_H%QSM3E1Tm_ zhCrIh>S?5^Z=aX{Fl6YvD^Wv%Z?2x@k7+Lcv!b43H?;XzJ$l+OQT7mgy1lL$BETCf zx7F{?s>1s*x3;X1b%e=qaaq*M#|JHcP#;OZegrW3c?~2bUmeiCw0;KvMS7K!X$0Y}gJND=uXr9Jy@8DCW!^5M@iApeZXV+`**bkf9Z$DSn+X zjqR9ZrGZCTJv<_}XvGNft8}f}+q|~VZu`*M$RU~av!CO& z@CRP2UPcxM;b-r|k@_Vu5x!mHs?g!gMzRdY!h8?vtb|*#^H`81!=|HcTra+qy8B_@ zUShSmiX&H8s(f-DQ!*64PYOH|NA#o)8uIAaINFzjcHiMvG#F-MR8P8jKg$q5IEN&)8$4PmhAv%z@D5}w}j z?%2CzySMZ}2~1_bG%u(JV=?dp=7aEZa_1O21;x~Am%mxXmcn?y#}@aAK(DgR-eN=w`!DTrk&v(r#QUhI{B^HiK5|*3 zZf4=zR_#4Kj~Tmoke0k7)E>qWNdtoa?$;)0)Rgh&UF*!4%y)?nUWb1em7TaQw0A8d z5pKM__nA>j1$&wQ$}a}k;)u#e;#-gE^nV%Tu_YhP@#djzVl`jy*--b-nlwZ5rkp0x z<|d+hIt=;4;}9ysG23JOttmn&b9|9av-0`m&XmQcd?kE7e6rB*?Xn%~=>!Cpj(bZ& zWF00`Q?j9FOqQHnTDrbL`0a5ywXc97+^8n}D6{ICvVW>ZWK4}JDZ00_=W3MNLo~iB zNOda2m&Y_8Y_yU-cYIvbAsbyKZoGi+^ZR7|5aFMiFAyv4rsS1gAu}&5;2o*3P8`?O zmoJ8ZoZz&Pq;NpNt|qw&xCRW~VJD}p0&lyHo-&4r=dAr^K*gz6fpK19g}U*JlRW z{i16!dHNb%u3e_&{rQ=g6e}Qc64_v`2_Q+nL++5b@9OX{%8E}Lp(eKmJzYOdcfsma zs;(5$22H7{4nv0Z_;X}{HhW}b2#t_`PtYRz(XbAt-+x@19|D`Rw3s(}7}ErGL8TBe`c_kftr zsD~lj?3QV<4DT+d0qOW*e?!A1AxtshWu9vex`L+Wzr%UfL#EeD5i>n%hFI&!+?l+#foR4 zv*CFm|4YiJE99i;ElMs_4(BGCTETkUvt))Htwgzq;5Ir9e+rvg#E{Y1>oKAk<}FT6 z6_-hwEsZX*p=f34b!KPhzcF`ZSecUxzBhzB#JbF74IVGIK3}JH_5#|xLQn(-u(SVH zi@;AC))QT=jsIvz^Tw^b4dXtOG2)(9({9I7C4Vqt=iqNu166ERIN3|s^; z%=|b5m3U0WxM6Sv%y(f?QB_AFGxQLlJ7hOqsNWn{YHq?{d)bFFS@M1Lms($U`Cm}T zAapQ-hWF1pqcP;`fI}Vx2p(vG>HEL+$`;lKh$AWpw=BNP6&bHQ9S9Y;;Ap|wE!=Wy zO(pctI1nc9_hITMOx`5_*{_dJ6cE`iuiXr(?T}^Aacz)e&oMoY_>&(j_pl(VNFdSn zy?cF5;IGmBpmRGQIA1+3)5AJ~5PKCcAf6N(YHXz^?AXx2oKb}nA$FVbZR3^4jGkX{ z^HF^PwmHZm78V`TX8e91us;~}jBgAmS&KnKJe%4k%OJL{&lFF!2oF$&d|0_!r(q6ZupMCauwWWuVH4 zt~yMq2G?1OZQ5vwsrBW~Qyl>f0xRH}dD`#?@&FXeu{`#mf0#E3(rIYC5f2aegDp1* z9z5ELQ3b~ZB3mql@dE0QLL>CFp%2I~6T~;32`)t|ITh0CFehV#7z-Q6zDzziOpu1a znQ1kkTU30eKIW@>rg4UAI)J1Bvu(hu2lZ;y<3?tea%kNA7HKW-u|(!XDs4i%kv>RH zleUN6@dnN*;JKnh3$--w_g2Zp@8#b_&TYK9dG!6orZgt0a+u-dTTOokYc;g7w4T;Q zbqX(p*3;e7`HYDiwu}U>8aUwylJSwaH{EgoH+K(tXZ};&v-dx2i)@fF{%Z(7>4d*g zNp7!CRtRFJg51L0u}&}CwgmY)%n{HbbOm=?iS7Nl+3$PiC2{X_=H)T-)<7aIfoE2 zjGvuSRgz}!28U|;Qg@=s;#FtiW`xH=FqR0$OL`}f8?_o7Kuh-!`F#ex)KG~%^95cYb}*eN zCwe_}nWN|R_w`aWq5cJNFJ{#W3b|?nfcJHBw(fpa@B5ucvVXn9_TervZv!G=NECzW znG}xrM+LCy4a%c>Yc_|l)KQ!xX3W6}XAsX68%?*WFulqB053AgCzt|D$bw*oFz z$d}_FMRRs)_84f@4{akUCna|(6;qCz{8{ztQ}#-q#U)U(*&|J{OJA+Y2}Zj_LVZL;e50 z={@W$#bzPf^f(+v)z;6w;ab!If18i}xXZcRS^r^<# z0;|wbV@C%Ep0v|7Tag{0t}OgV!xibCI_u8-!ngjf4Jn?L&d$57o-aJDfa6i8kkLXZv)Zw2Ow&+cSdqf1n^)UN zaB9NI=2B7pA7tN2`Ii(lsMNOnUiUhS$I4g9)p_FUD|Pys>`x{!mS#=Zx#uJG@^Dy@ zJwCgQ*3O7Rex36;9TykV_lBsMGj^H$gecjzVkimnEjBtmi}}^9=~07(2TOx4nk3jd z(Nsj^pD*Xssj2GGNhc2|`ie84`L~>O2fY_`A1A?Bhx+Gd*L4DqqphuX%4T-!`yNlp zy)HzX{;Yl3smr?6{SQh#*vP-LamS%Z;QXngO1f0l8fge8lfW?Rr`8obM0Mq1i@Fx^ z`%{8D?dP)IW@B`WBIlh7zqRwI>S|ZL1oai@JfJD0lSoyzyBz`!_4)(^u^PAS5^}9F zEEo3pqL_%6Z+!U}`Tlnhr18aBxW_{5gB3c*SQC>ewHND@ls=|esjenwh zN*hP0|A5_wE=F7bDfEn*JgvDOBFdbSsdqj}!^T2&zzRJ)T}hUOLx7qR&g=8lT#t73 z*nOG*mE?YL$qZceOc2l-)cQT8MpoO`t~8)RcMS74mm%e@mR=v|Ik{PH+-8$o881aB z32x(n;8Ws5!^y*l{lx?cJ9b_#b>5KAq0shC$o?6Psk&&HXccO`V*Yb1%|4gM{c5w( zg+o0qcW{J!qboJ7ZBZzzA_!jkdnH5oh;i%WcQn((#}xoXmqDv6X-Ohi(HzWir8brP zU18Bhh(GHih9pInSe+a{iwECfZR%~i(VO37^!4Ef^|2d^{GQ$(e1s=75oJ~En{+km zgY*}&F|nZcun=el6$zwvA)cF!Xm95!>Jr}l(sCk~@cH`$hM=K}3V1e6)pn@sG1^26 z1ekm|eJrqMDL#kDoNbyLO^f-irP8(?Gj zzF4$g&eFO-&6dnHAW5?OQ6En*Y1>R|we4~7N&$#H^-q^fjsBUqY;0?PllIOCmc4#}_UEhTzHdjrLHDw|J`Q&Oq0d))9QmbTaD4Okug~QLxBGnFOGbB3 z+f`JYhOUR-ei-f0^42_XIeF{lN8{ts*`(vtKL%>#rveV&?5tQwl@y~tVczUX&)+{| z?*U9yEeu2Sx0d3uD!_Lc#N_dyP=Zfua}UOXU*`AToUFY_MLn*ie7tFT@$x?H5J*Vw z54N4!gkSK=B2w(CEG-IRH6(6_pGTaQESAre1XyxNG#w=++KQLBA-{nuySq~j@pdm# zCOKKWK&tu^w3Jn=b9W~=_`6@ck6o!U!vl85BMg~=WA9eJD?a%T6^Pj#eUa6+Rgr;0 zRMDnnI+CxolXIL7LZ+$$1!VQ<43Am)mIpNpbj%zOm9w#K1e%*9aAbxA9wG&BB{}FW_;l z39lawy&?%C#EN>`xk0EEn6L{wkEnI=&Yw@2xte^T#K*UK;6}5}T%bcsyMXG6AwRjW zHu%Sk*dHg$LU-7e+2%JNZGJ^AtKAYR_{yDrP5`GQ!wSFM+gZtHVK{p~p@CUXztiyW z%K&K`5}u7PpW^rq4Xq(*Axny|1JJ?ZY-aD=PN(C|SokwqKhX7;ZF*j+ZRhE!`!8b) zC)ISH`vv+;XN&Ull#g7VWPfi9i?JquZ;AA;DE}^j)=n@6cSmLYymd6hqqcA5>a)|< z_fnq_j|UkDw%guYi+4gsJ&y6M#P|)X*lQVrqa9NoB>MJI8UED zop+hfS%q0%&Qcf7-%qdW0zMv^2A6eOo*kdR%-$#jn2aA&4E(cSL1_EwsaZR>y7Zje z&$d4dKp(prGcK@teY zNcygh^3z=7m{^ZFsx}lftqlmgHR~PR@G-#nQuV7lKl4UmEdC+if8U%*4<%fGI~|FZ$)81HOLjt^L~J*`uFm(3g(P z!V@8%eE3=SlecYb8a|n6xncqzgreEGLD+nl9`<{IVMct@(%9VU^eTY1Ng4w>`;L6M?FUjA^A(7;Q?s*d14e}jN_=I= zQaKG5Aqto3DeaWPa!|I5Q`viA0dDeg9YGT^`eTJ9JPoi4LY{X{RCDeJLE1 z1EUtzE#R0rTl5ZMFdeAJ$gn&hwywZIP{tMJ&geEBvxeX$+Z*foMdFgZt$ic4M@8aZ znDp<$|4z?e_4+&-{xcJSlU@=5NzdM0P_R&fs@)NamaVEud*jJA-0FLO7&d^o%Kh*$ zG-tg4IU;OsSz&Iq`zl{44daoSJ%~Za>CQ+8X$o`KPaU>+(TbY2&O( zM78~k1I#;7O0Oh4Fj}{zWmO|lSEXB4^I`CJ>Xe1A^W)!nhf9?t!m8G_>N2}e&a*`y zN<@NJUr={(+O?agt}LKGUSd={-+^Vec8)KJL7Q$|P~5yZS~`>=N-{#R5G^VVj(`v7 zGRtg4>O#=}S7MqMz(rcm`Gqn{FJVqsD;_(e59kV-#zIhRg%;q_B&0}+b8OY4y`IoMs zU>CgM4!Ih9<@H`i&gI#NIti-}s7K`DG70*C8Du+?A+pP(#uXY{@y2T~PD{WvxW2 zVhrwLam%T-xy9imUHp5WkZ!b!lMuqxDFn6y1SKR< zW&{prWWez5Q3SlU`!|*`ICODkQIL`!%Fz!^=#;k4vwy?1ouk#<=p!+V6-H)x%@#W& zL(BLO$73s0m0(Qdv5I0>hK0Ij6fDnN*01%xDaB&8{@ysYTPt+9ywJyl#d;X9#^mll zNIX_c^fwFp-~ky2C4s^;@lXRXYgx#hc0Rfnq0dx}3| z`2D~q(jMn+E`P3D@oWbT4hUl(Y6<~Q_|};yh$^jr&7DwM(na^-mL4Jn?z%T`M=e`4 z7kwk0WGO;T33?+cY>;5ambOzPm)u3~y&YyTh6r4pLvPh{PkJP}MBfz7OcD0mpT6e> zQveRno_ApWmm+-%^8040D&R60h=Pc^1Sbh_`ch!0vn|mCJo5np+gJ6_U}-fqj~@?o z6T6r7I!TNUf*moA()_^P9BZUS*gD2H3y2kbl~ZA4+F_v5qZxWs??lKD0d z{wDPHb^)#Y#9m>NB;%o^jmn<()L$f=0=<|l9r!Fk z3X<&WmxUXqNW0e@0pr9wo;zjyX^x$3^84yhc~9$`w0W}|pBQ~hYeOsHZ_3}!oq^w` zYU=gP!jRb9H6xYz@3SAkT&1 z_mLsWfBzUF3%V|x(`7FuvMaW8;{!Bm;2&;mnUmmdGy{NvW-kK_CY0}Lp{#K0VHLbt z&|H$1OMXUFaD%V&RUpULb@+_?(P}T{=f?!>C*Eg+<->1sQtSJHCDR{$L5$v5ly@fY z8?hE!0uzke4{u+egGp@d}G%AX6B|#KPXgp+O)a(m%+-U1@}si-2SuVmO2l zVOi2*T!p#d8*UQ2mz=xsfWhZ7s6P|;0%&ysfr;{<7Hw;xWz=vO8&xXPQ&=0hKe)~A zmwDWp0_n{P>}A5{1PMyM=&rBL(6Qx)EeoSoN5r%!XiMl*m?Y4dnZL`(f*JIEy>%{S z+dOM*aTxCuKYcP?yp-qF=m8Ip$u5m=F=9`=y`F2RJ3k*EJZ$SaK4VWBXOS*D8m_aJ zDfm7PL)Uzc7LqpD?zf9%IU;_qcl|mB{RhtngsE_(%Ch-UZ8s-4cj1e!{`b3~WGcp^ zF(zRBbu7Qym&tqm&G+!B&t96(uwti;xpj&QvxQMWZCmgm8}itU>7%N0>O^}BVe)W^hsgx z1eWIKZf)XKTX56r3jJ3cAId{_{p3KmJytO@x? z0V{{_&t|1fB_a?UECCcF(UwuB znKL;VAi$*H(qvL`r{GGaaVuW{joX*r*a;LYMZE8q-7?Q$w`D0~a;c_6zlX|3aP7|i z(ul8S4zZm8!yg9(rlbfc?6jJ#mc8gaAFgz^kc}CyGCqWx$fx6b@5nD$ye{t}Z^&=z z4;lUT2Sjsi9juX)La{qYXm{NU#e^r$oTgHMRa)0Sx@6kxZu7OmOyJ)F%e78Wl3pa< zkv^dX^xMBKmY?7oM{R!HIWQL|_Wi})c>T3$=c*IL*u-)uKgYGpa_J6X+=~6gBZ`^Q z=E1Wg<7wQS6@lBt^0p^HS6@x4ur$`5&>KJe1k>orz=fK>;L8JL+tvAIE}A1t93+YX zz{5}}?M;*^yEXn+Vo8d_JqdMbzbT33_2S_Yk7N54wVce$T`yK`BFYIu@GX|RaLFq) zT3avl(n7UzuJS1fqnh5yxG+Y&l!2#Q%)*j(iFxqLD~^K!|7PO3E4CMt(eDex|2evL zq`sHaL93nXPN6r%#T{^ecs*xmu7ZjIaFkUWferXKXaQ!!$y)GHT^%M<2{517jyMjl z4(O=w)R;oZ1jIoatqsx}#wg?yDwQ&-Ju#8(O6RJWtS8D)ZRi4cvq*O;cxR5>C&=v# zUyr@H4?LL{XGDA5p_;sICtc*xAO)4wg~icANeJp7=!Fgp0q-8pp*(ob(V*FY_+6&u zig|cT#0Je2V!5zT#T-eq+8;LA0@xT9H4(LzSeg@#>qDJ0_nXX0nSa?HeB<4a2O$)( zoJ@!H>DFkjMta1SP3xK&7uU!Y&GHAzh}Gr;E3GJXI?T={J9Nhy&2A^hf3o4(@>!Eb|X$lEfYYsL~O6sdMCGQpOLQfYHm`guKXx9!0SQ$7Vt?f-?w}A zoZA61wnxvIudr+LQvObiX>2h)0OsG&iS?M#Ehjx3HEo_s%_Ob!_EQlcRAjl_nTF>y zU&sBj5_vb!addo|M%;*>=-em(X+n+njQ4@>LL9r@4iwTT!TqR}-rX~Y${G^8rN-dzz;D}em z8#`T8`K`k}otSG?mY3gauYd4ec>MRUJ=@>h+&-AM2_oMeFJL{oUfnTe;FU)u3=vu;wVlx(L zd*dCnFXigczzFg2Ct=1&e6XRTZDX|~2>P`Ua+fgZeXJ`;y5Wt7ZF;7cn1oE94BcV{ zAK!AG&Fl;#@*R+z)SN_KZ+f`3GB)Vt1uN`v@{NTebRA<7J=8qNuB71Nt}qxHi9kCNI!&O_@+DaYi*LqjFVQ+{N>YyiafAf# zR6dW(=Y6=cId)9ncjqNt-}kZ;OCg8r?IBV{U@qn`1w?Gu_mS%%LP+r^o=V2ZB%vxX zW2uWzMSI;lrve*NFY^<^Imr8@)ti1ZIO1i2oz*kGq?%K9(J zWL<84fc3u`NqQ+W_Pb2z;!j>tbn9Xm=VxSM!ji1Wkt6Sx8T^8h-_R;Km0;jE`v#BX zC9=dS;seERp=><^7H+00MiJvxQ=TClY4%i&uB`sQ!ymoaCA{ z2c)O7bH+DET=i}V4(~z?vrc6Up6=Y)loiwvwFxSiNJpEd54jI`sBM- z{lc&Oq?*@1FxlNPy*#PyBe6t{^V`{M6MfJ*Rt37f!*|lja`cgs~eX^t#>*CI{%`O z{00k50V9KdBEdCUk{0kT%Ck+mMj$Ys^9*}rv82#__F_fgPtF11<~QN>j>8Vjr+Iz0if4@kBPsE5Xf)N z=Y<6aSUCU7B`$Pl;`TaF{4x3jHBQ6(1rtO9Oano<&h5duAh=}zO^zVPfSv0;J_Hw0 zCpA&aG_@(%Of%RvS4WlX*Pm7!Pgv^r<3U&u;Dl`3&1uMwAHFd{A!JQxE-pK~q$+LA z)Q7xor5Ge5N^18ka2Oy2QNnEk#0h(*56x>|C(t5?92jtjIWnlRqO78rHDa@eZ&-KD zFH4I0Q1lR6ly}ua$@mdSDc`)17(8XdPz{l7)ZPpZ0lZ{~tYfS>*nWlVFsF2}o{T7} z$cH5tM{jV=oEDxrx`S$e8x04kC!v^(i3k#d@bRe{R@@Zd^0moDVSOB+Ji^PRi#3>- zOen2;c(tKLujpob7@9rV2^6e3+U+>I@op|U;9+pyw;Lln3!80;-5{CNG(x_}RRwv* zWCOoFNQH7`=0}gru#^L62ewwd)FelrZgiI~>mN|qMjhS6d^M$m?+u&wsmWKAlpShN;dy!hOJaat1gnnYL@@*T88?HBNkkW2uVLYN=QlqVm^NS7%-|(P zqk?U{OunzT&*+!4>X(JBVyW$!GmYTGhhDp$4DS!y|BM}xiJFR{i?&1@BhQl>KTiSr zUq+vg+A*K^!SVz%4u@l}SId_?n;?^f!#=!GHydS`zYf){hz$e>R?xPtGVf-DoLmgu@V5?!4PQA1QOWVTaNlo& z6OH#QfB$J}vUfN)&wkHKg3!W#AYY|{W@-*lz2+8SKkfC>us}o&u%Us@apUai`D$s8 z_@FyVjej9J)&p<)f!)Hqm>raU{m_>=*hywn2=>e%T?Kt#$ZJp9rw-487Fa7B2v;NC zY$53mH>pc@B@#Sm-$n_?yh>Kj;ifZxq`Wqqk#ObrTjd04!07*@%0wUwI}V&VA9Zr? zCfo-}Dd6`&3OD`D>`%PK5bH<%9yUa0A$rK3YVHRsFm0w&gk@?yYzA z1t|e7t&#Tj1Kgakr=BwmPvDgJvyCIG7?zMz%8@eTH7xSrqjpfCtZ!gZ!Z(YL(_#K; z-iPpXhVkC!2Ok#mZ zVmcmgom+%Oc^(%c6xV0-C-Rcc!VZlitxwW|CP9Kg{^)_^ujXk+67NK~PK0Xn5H%Kk zT`R4770>`V^pgx3o}d&7s9;_L<#HoOdAFX%1mO8Al-K3KV!U&o>?~T~rDTfDSZ-kx z-<{{#!KMy&_3HZEwz-lrKvJ61=c{UOYo_>UtL2q$j^ydq!b)en=3N4}dpiac4j4*q zx%vgtzvne}neQ88}}Ans<$3`vJHJ2~iZM&L-`5fh*D%1`vbqgF|G% z(D1Ff`VQp;5V9|^U7%4<`f{hJa9cl8M&X{fuOUO4Q7JfwnyUZ}qF$)x<{>Q8F%E#V zJpbcY8|Y-7Q`I}HaL$}@$i{ko2zBrQULQfrV-WE2S1sSGyD@1QH0pfDt zqTT6_>&1c9#P2|0Z8A0XB&$77gc5BJhM+JJb>Ab9-K`V_?rS@qLMZIjWcDMm3M1w9 z-o;DUj{U^>4Lh8;j?zk6@$}j7uUs&-!NuM0HYVE^Gn2~I6ZMx+(z&Cj14+WrN1Q3>ZrTnO>+MczL?-*_UsV;qTD$t?McmAZ+uK8@DNwN91O2)wDPBr!<{T7 zW@Ug#grD2g(X1csUtvQUu=3uik@J=24&6v``oh%^{W#9FBA)zzBP?x>z!gNd2OT~! z#Df{pwkAY28cDk=;knI6Zvs+aiiUr=;m@jd-y(3{hWq)b)q&RKIWZNkcb}3|y?L*! z!>xAKvX?R6q2$Ba15RjuA_}*I4zCKvF}>)2d^umPI_<7A(iO0EUmD*<3DuGrO!u@y zPCs2MdvTpw#GVV2=ZE!sfOBZ;A9|4wj0$02AVWxNTyoJOrJP7^*Ig*tSu0kaYI`0#w& z1U8uW`G)^CxeT7ncbFW@X!#jr zNXC~EVUUzB#J{BhqbFm`M>nzphh)P2Na=$~6z;@UvR4faqr(O~e{-xv6GFP- z>d!+)aKBgw>K`-TkE(q~ej$sdz%p7h3y=f*N-bLLX={K5JWpZC?7pw&QP0`&Yk6Iu zMz`%Iw6^>~$)(uoUZ zyo7yKCvQ8nOgWrHlt}ogOqVmaT6UNA%lz(^8s2Ml%F{je(uOWZJ#FJU$X7iX6(N3- z9t77v#*hG%q75Rya96B!@ouP>*A|*|`{k$Ky20^J+5I(4lcXgcGou-omu^@JMe7j^ zp<)hPLe3?<2VitBg*UXBl@kfenX7puo#<_AlVbfx%WlsmbRKOD`NxytoRRN}cpkG0 z_=cUqL`KK3#&4w=4l@z@NBI&8t_pr}9d(g=ou|Nd?BI51dvVkdTOBPTArn{C%1lLn zXLDW9p5D>`Pj}UYzXV2jx3&g8D>k9px%uK$HeEkJ#$GvL-XJ&8uf3xoYBnM+_xaJ2b z3Q&NV>AycFtvai5GC;^`kTB>PNHq19<&6ceQl=p*LH! zpB4m2*IyTm14IV!Di~I+On{W7M~l!uZepqA%bDzu^Xto}%ZtiO?KrmfVLD^I!+e6g z`Jd(t_8*lDV!Gq9tI||UEyq~H_4l|UH4%#~T+YtBGQzM8RxBNNW`K^O!Z0qDpVqtgLA0vys~Jb?7vVoIU5dRkX3KHglWHJF!x8lt0a-Kdx(bW&5XqR3HW`Lz7HMU4hckKJlx{=yuXxQOYh$)9Q1$2Wrk*^X8unpXVq0@ zz-?i=yM;}Iw3}wrDcvF6-5Vq&UP8LrbhmVu(v2V>B@F@s(%toW&eeCW&mWj`tTEOY z>te3?IKQ0tyq-=0%&%9zd4Ol*-!!(MgSoKMbyU3E#g;ZoEH0)R(IX9zZkg$`jF%*S zh9J+voA-tq>>v)LyqDX1>MN6rM3ys0^ZwzbVWPLnUB0P>l_kkv847TY8FL2#dZZ35 zmc?&JRDo>H0i!DeY^L2O-E+s|#s1D(Z&p`FWHPO)iD1~Zc{@&&mIB*#3nkYoneDRn z<_@&>*f3^3`A@U0uLrdv?8b4`U;Nx?y_*b#D!%S;xN%}cIdE#kRbt#;PaAGQ5f4=* zWV{g?6OHxQGQaX%rt7O8tiIp_)m}s-t|>n_bjg#6CUlfWycBw(C&QK#W3Vj=8%YxA zIuQmAqjp13`p>!P@9eXmRlLk9JB$e(rrmA)en5TU@^b$il)XuewdkzBa7^lU1+teL z9rr4*fl$i@U_-2@$Ejy02RdydoVnm-f6xkEZ=U)-S2eacNZ0cB;LHdBF7tPEv2;fC z#zyK)OvZ6vD?hxP1A98%hqNuS#>T>E_r#z_T&fG6cjf+D7xo4T`b-n=!ro=U}%Xpqd^ ziPjmk&xV3v4$d{AQ6v_sv9-A18^>g>ihbk#zF6gAl`VYNJocxLBu@cVns)%?XstLh z`Gb6}?{DeSay>{Yoopp#2IDkK$0T9kn^TbV4SEw2Rg2J^*Hi<5wR&!zd~+TpFk~V4 zfnijtKHlbQvq?0D=goDEW;nK@-o1UV5WOzNrPClK5PDgnp_u*6e6ey{n(>$)Wj7pO z3b7_7{=AAKF5TX}ySY>YHBl8bV0C}R`Ge^xDcT%K1WxSuj)b*L;|kr#?3k?u?T2(V z()AhF{a;3T!9F`6wV^~c83o09!J?!K?C<~kJpDqPF|rAVQ$GUBnt~vatcXue z8bO-OM={E`*-ZTNr)=4}yU74~#Hx7Q;so4B&Nn7<^afON!`ciL73StN?|v2%EzZi; zpc_nt+m2=G5g1c|?ND0%0?}h=isxm=QB#E$Rl*LMhdBQNcGlA4i_=m)vJOH4>JZ9Nh#2;J4x?)8($>qa{o<@mugkxX)7;15Uc9JfYIO-N2 zfSz2JYG9e$jqjvMaK%7K_5qvnyG>6yAGTheSl~c*lx#~X%VIvoMl=(nbhfs8GarJ~ z=Sc76LIJxE2&g`IpPN{||0K#K_@znX@u6ALZn`!XAb5!Sa(ii}b^9D7(qXkr$H|sz zi1T_Yf8HX`z_JBX9I(z}sXe}oT){)g8eq!}fr&LLZ2-YchH|K(Cxq4^IQWa9N}p^$ zV?I;A-0gsY`}@bbot<0imva3;;J)SQENmRyLv6ZrbA&>7%Z_ZPIRtxG zZlW9*5?VjsSQ`x2i?BAwqjuX`e&K&iY<}kO17X=!o%XI|_Y*tW?|CH*FLTY-=)5;;C zukd3Ow8Ecc-j`js_yn;{c;Rkj4+$adQ)DvMKl|c*?>XU?1k1bTN?qY64S1TKwKkb21^|9Ts&_u>4ek%pUdu4`*&Z$9*c8XY>;i3-&jWtk4?<#jHO8 zNbsMC^XF*lW_IAzmp1ck#E{j=O@FS_g3x016J77mBV`1mh6=~{Gu>x+yT(Jtq(rfU zm#E?e{&4RILeBIin{Qc)o2>THHE95d({$@ZgW`#KBCGCqip16L?aSzzqz)BoCyAeW z3c8LG)e;%fjMmXry~!(%iB$%j;9csoY?vB8EmL615&7VS;==6*O8PBP94Te<<#Ld_ zl9UThFu4(w3^k)v#9O6LyoH}++Zv~M@IOAoApF@FTss-7)!kletBa3*lZz{P8&wl zD2V6l3NPF`VlcWPL+W!faGVM%e^&N^pSE#p>ssU)*9XVIcnC}nYxQ!c+E46xHa{~t z%gN&t8Evx+CnsSDtDBG=v6caZdF6u|I{YG|gmWafUzH0Gw2pgiW>`xN#=o4&r6{>8a;wthlx>-#U;$Eyu#$Q3>h0Ryga8A-s#s-;A9* zwKXy3vcLS97KKN2bSv_oBJCj9scvx9tb)8$sp2mm)mHmsc#O`u^)GO)k$d{x;8XN? ztyfjA#%t=T?Tp7BjjsY!wEg%xA2o;ZWt~66&Bb^*Os|Y)sk+_kYzsEx=J|PWig$TU z+WzJfCR{IE?Ig3=w=EW&d96t^7?-EIS>EF*Tz6R01~5&S)eIiKIr zDS7hUF6fI2*D^6s;5qi|A^yHui`s2DVB2yo!xL9+h$Y+I55oi)C)|9m0xVTPItm*{ zeC4z@e*XTA?y=4(tY}gNVsOaFB`KWh)c{q2Sn?-Sdu%?jMp+$%)8`zFhOhC7#;>~6 z`H?}iT{-erh_4~|CO$6ch9pBjTQ@@YY72N&qm%5biFb%FZaUahhGjo=+`;SJId$j3 zg@4Uq29J__Ki3D6pSZ^xm`{3HwsJmQY4^BBiy;er-o|?%Za7HUHOdc=ajVO{#R+y1 z%%0ciXr$JG#^yBi`9v=L-uw1pCA2R}GUE0gDPzp`o7x$<0~}04r2ZKH>5Y%D_jafo z$>uulUnqAHJpGxQPsViAMaa~iQ_AG9=j-hoT_M$yMFArKQhbtm6TW_8*n>MND74;**H9WeAl-Jt&ZS-1D?Xvl`i(J({iZ6qKL<-oe{sBb?aG4Cgi*X?l4m`QcLLjeL13#=9sfh@&X2Ds&mu7 zFXXm;eR}rX({3|n+$G*WjkmyCFYa#u-|VAQDiZ7$*Kp}O38Xw^ zzZ14YgVDX9xejU$MJ7j;{gV=N-KdydOqRiUa53nVf8RAWmw!(GC_AF?+43r5@h`0{ z>e!l`kbgn}pim>KO&?RC3tar@M)uB@8;6@h=))2Hn9K3g zYZ9)x;vOh0Yr7pIRh)Q4#TCTJaBJu11XYc5u7rPLh7etX(0eksyOPBu^!K52zq&ND zoo7VBk_^ld{7VBEDOg^C4pUY{c+||Nok+mud$t^?&llcyB|nfWliZLSLA3)ah@&F@ zpxGAskMa{pBN$ys&*hkck>Jii6y~-qK<8wy7*L|)EivaV2JuHh8(T<7p`O&u)o$tQ zk^R%`G9!)3=z!*`{2as)nw2Szh@JUDxOtlgvnm+tco4of}w zTzwl5%|K?B)AH_hF2yY}j6Fne)e5(@=p`OpW_2cu{d+8oAA2(Qi87E06OBlm$HtS8 z-`sEs*+E)w{~SCO9ztn6GQ^$Am$b5j_#pUVT)*D*8}P`^Ck}pM;MO|@I|uhgxN;hs z41VHfmzVddCY@^5^n7xgLbOX2fdcSWq2aUE41Q1OPAp7~x(V2mawrg|pab637dys` zGXG^2r3CuW!IR@Jrli4W6g~%Uv6n8z^j$9Y~J7~nz2X)-O zBeI1($jo7UtZ6R{#gv5jL5N39ZhVh$=2iOJHi{J2ScFf+e^)(k;9`@)lwzjv8gAQ8!+pu2Wh%%`IH}|_=Qb%o$ zWlVH>adR^({`STctX?}doe@f^5Vc|WhKcj_i=!@(mFI{gW>RKoFY|!U1a02f4sAEu zl#@U)C;gOA${Zz8zpBF-ua}uRrXWr!71BrKP^kE{=pLZfR%o5m!P$&~GQogU{`lOj zDan|^9JZojG@zh!IM4xg-qKL>NLTr}27d+`uP~0RQ?K261e(4WvcMy73&3WK*n!vA z*M#vujJJRs)c{>s8I{FF@?%eNd@&o2@D2U;m73M9gmP`q)$D7pcXf197aZ5uml?JE zfDO-9plR(=lq}l<&942TYI6)+zU92Z+lN+!ti=VoqrR){psXYdsa_CISULw)ZT<5> zrMx$9c@#Ekm_~v_d9r%NZWp9LcabYtj7ot&$n3 z3>VU7+fchxjmHJu+YF0#5|LK2)H;}|$zWt5GOWfp4;}(jHenTc(vQXJ6PMgtfk+D_*Lq_Ij!^!>UDR?wQ#mZvz5fO%r=*W4CjGHpvD}p(%iXvMM$FtAcRA+*W z3h@7Tl-H6z;j+SsHDVeDR*x%@QA7%-L~%m)TCp*UFpsD)^s`50Pw#$_xL0Dy8jOee z>!qn^HV1BrV@S0jVkLiulm3;`Wi1`PhDbvrA}Qrc?RdB$M`kGXDsoSoWqP*lFB|A? zx=pMcBpKt5f|X-=@95U&;f&) zmfjB^&8=sA=}TZ@>f0XWg{a)C*lw@BtA9iRf-TJW#{+OIBUqpS{|}YetTzperox&S zel{O?obK$H6}hC)i?ZzgFy#5tFle+#Ny_s|Vd=SZ(O`3FxEUrmD{mb}1iBqs>l7JlE;eyo0h2=ZIz)XMX9Xey*lSahHrVO%m=_=zp* z4t|IMBAcyB_4Kt01K@H*79u%pqr51aTP2;(Q+`nK>eYKvzG^xxHSzZ(ZJRLBYls~R zG~OE3+j^RXf=uQ002k6<+tnnCl(mrb89HWvoTdduY>tyt#}6lJk8sB?9`7p{|M=u; zKDHRYPtY{7Xpisyznil| zx)UxGa#;V9ZtK0^C=~oHl%ObRV?g-C{7F6)LRuveuzyIJV_fsA)v7}x*rFwCeo|lq z>y;&B01@w-Afh=|3{|Q8?@bCkyqwseo`gDLy?d2ln8==A_49?mYA#OOQg z=Z<^vZq)D|Ko>^^K{X_z?hO3}Ai6a4=WUUDR;7VD?yFlP4wAX5 zR7;=37}hU&wNw87xK$x&SR7#^{FCS*^ox~7a(nWIlTg`vx>x`Ca;mA`WAn_b;d9XG z?V-JzGxjppCA?VYcgTF7ShU4mF@}Era9S4pE?x>FX|YvTdd4j9@@DT+I2?Up z=P9hHj3RiUKy2ISVX}{_i+6JlAu@UB=70({45iLfx3HLHwf_wlkk#i+n&!JH%agI&$RvGEy?0yaF#S;!cB+^N{L!mqwvGH z`!6RfR?l*p%+RH>jab!ggk!voh90G4OsQj9mwvffElswDC5xKC*omqrH|fYe(rJmm zqM}6mEBA~QdOMTTkymAg$a}zSO>&K)9_n2H)kongM_RB0nHaqRWodr>{5AV7xcANN z5czVBBg&j_T1%u+;kS-7GgCFHg~{f{HcCE!3!!IEq+@fi?6EIL7IZhBHc6S)<^8ds zN={H*qTC##XXn9bsN-3a+aA-`m~EcJ1DaKw3*WE$>Gl7*_$Dqld}Lx^Jr{|D&`4_l zzNu!Brbs;U4wufkwk~G-8dURf7GIn&ll}4farljC$k8{E+4G~KZPmn@?b+s?qQ=V( zzq_l}A|hkgv`1gYXn|i36j<3jFH?uq^nqdGww7tU74Gssyoy6lguZ~+vI*_XGUB}y z2zhPM)urCC>1Rb_yCL9ujQ?bce4A?pNUQt*rEk>8_>+R^A$>IJ6}eQDBNV1&eK1oW zY3bz)ujN5M?LzAvIg7lBIKgIdlh3w<7JI@%(#ZKo(%P?4bjw5XXtZ|uZ0K_{B~&Y4 z=q3=w0>alcu2wm^C0xA))mgGMJ#@Ad|_c6r-M}w}3Ev#x?JvtBh`)-7V-Q46)apZAs%w(v{*_^Q*S9|d&XE1#y zA+LpEVm}%+y3^n3?wH|acn!#?a!`_@ESNl88kMb+he$zlwBMX$KJ|TuQ~|#Bq)q|3bK*B&j(faRq=%~d)j}^3X9L9{<{VVl%Txkc3^=(K2e=Q^EOC4L(bwfB#Hk6jqSDLWxg6AlsO>-wpYP+@pp&Vi{tg rvYXT|nrB+xN6o+a;Aq6y?jVS;u+H!v<_4w0;N|4SU}Su+CX4YO*IA1M delta 22877 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 From 8acb1aed018d237b88d5fcb49d834700d5c67ab9 Mon Sep 17 00:00:00 2001 From: Gustl22 Date: Fri, 4 Oct 2024 21:46:35 +0200 Subject: [PATCH 06/11] Improved rowspan algorithm --- pdf/lib/src/widgets/table.dart | 162 ++++++++++++++++++++++---------- pdf/test/widget_table_test.dart | 7 +- test/golden/widgets-table.pdf | Bin 78588 -> 78470 bytes 3 files changed, 118 insertions(+), 51 deletions(-) diff --git a/pdf/lib/src/widgets/table.dart b/pdf/lib/src/widgets/table.dart index 4f7f3b2d..f691e18a 100644 --- a/pdf/lib/src/widgets/table.dart +++ b/pdf/lib/src/widgets/table.dart @@ -330,9 +330,9 @@ class Table extends Widget with SpanningWidget { var unspannedColIndex = 0; final spansOfRow = <(int, int, int?)>[]; for (var spannedColIndex = 0; - spannedColIndex < row.children.length; + // <= , because we have to look one column ahead to check if the cell from the previous row had a rowspan. + spannedColIndex <= row.children.length; spannedColIndex++) { - final child = row.children[spannedColIndex]; if (previousSpansOfRow.length > unspannedColIndex) { final (previousColSpan, previousRowSpan, previousCell) = previousSpansOfRow[unspannedColIndex]; @@ -344,20 +344,23 @@ class Table extends Widget with SpanningWidget { } } } - if (child is TableCell) { - for (var colSpan = child.columnSpan; colSpan > 0; colSpan--) { - // Define col and row span for this and remember for the following rows, on each column - spansOfRow.add(( - colSpan, - child.rowSpan, - colSpan == child.columnSpan ? spannedColIndex : null - )); + if (spannedColIndex < row.children.length) { + final child = row.children[spannedColIndex]; + if (child is TableCell) { + for (var colSpan = child.columnSpan; colSpan > 0; colSpan--) { + // Define col and row span for this and remember for the following rows, on each column + spansOfRow.add(( + colSpan, + child.rowSpan, + colSpan == child.columnSpan ? spannedColIndex : null + )); + unspannedColIndex++; + } + } else { + // Just a regular cell + spansOfRow.add((1, 1, spannedColIndex)); unspannedColIndex++; } - } else { - // Just a regular cell - spansOfRow.add((1, 1, spannedColIndex)); - unspannedColIndex++; } } tableSpans.add(spansOfRow); @@ -457,11 +460,9 @@ class Table extends Widget with SpanningWidget { final totalWidth = widths.reduce((double? a, double? b) => a! + b!)!; - // Compute final widths and heights + // Compute widths and heights var totalHeight = 0.0; - // Store the currently maximum mean height of spanned rows - final meanRowSpanLineHeights = {}; for (var rowIndex = 0; rowIndex < children.length; rowIndex++) { final row = children[rowIndex]; if (rowIndex < _context.firstLine && !row.repeat) { @@ -474,50 +475,96 @@ class Table extends Widget with SpanningWidget { for (var colIndex = 0; colIndex < unspannedRow.length; colIndex++) { final (colSpan, rowSpan, spannedColIndex) = unspannedRow[colIndex]; - if (meanRowSpanLineHeights.isNotEmpty) { - // Get the maximum of the mean cell line heights, which are spanning over multiple rows. - lineHeight = math.max( - lineHeight, meanRowSpanLineHeights.values.reduce(math.max)); - if (meanRowSpanLineHeights[colIndex] != null && rowSpan <= 1) { - // Remove mean row span height when was applied last. - meanRowSpanLineHeights.remove(colIndex); + if (spannedColIndex != null) { + final cell = children[rowIndex].children[spannedColIndex]; + assert(colSpan >= 1); + final spannedWidth = _getSpannedWidth(colIndex, colSpan, widths); + final childConstraints = BoxConstraints.tightFor(width: spannedWidth); + cell.layout(context, childConstraints); + assert(cell.box != null); + cell.box = cell.box!.copyWith(x: x, y: totalHeight); + // Ignore row-spanned cells for now + if (rowSpan <= 1) { + lineHeight = math.max(lineHeight, cell.box!.height); } } + assert(widths[colIndex]! > 0.0); + x += widths[colIndex]!; + } + + if (totalHeight + lineHeight > constraints.maxHeight) { + _context.lastLine = rowIndex; + break; + } else { + _context.lastLine = rowIndex + 1; + } + totalHeight += lineHeight; + _heights.add(lineHeight); + } + + // Compute distributed row height in a second round, now that the single cell heights are known. + // See: https://www.w3.org/TR/css-tables-3/#height-distribution + totalHeight = 0.0; + // Save all rows incl. the repeated once. + var pageRowIndex = 0; + for (var rowIndex = 0; + rowIndex < children.length && rowIndex < _context.lastLine; + rowIndex++) { + final row = children[rowIndex]; + if (rowIndex < _context.firstLine && !row.repeat) { + continue; + } + + var lineHeight = _getHeight(pageRowIndex); + final unspannedRow = tableCells[rowIndex]; + + var x = 0.0; + for (var colIndex = 0; colIndex < unspannedRow.length; colIndex++) { + final (colSpan, rowSpan, spannedColIndex) = unspannedRow[colIndex]; if (spannedColIndex != null) { final cell = children[rowIndex].children[spannedColIndex]; - assert(colSpan >= 1); + + // Calculate cells again final spannedWidth = _getSpannedWidth(colIndex, colSpan, widths); final childConstraints = BoxConstraints.tightFor(width: spannedWidth); cell.layout(context, childConstraints); assert(cell.box != null); cell.box = cell.box!.copyWith(x: x, y: totalHeight); - assert(rowSpan >= 1); - final rowLineHeight = cell.box!.height / rowSpan; if (rowSpan > 1) { - // Define row line height, if cell is spanning over multiple rows - meanRowSpanLineHeights[colIndex] = rowLineHeight; + final rowSpannedHeight = _getSpannedHeight(pageRowIndex, rowSpan); + final remainingRowLineHeight = cell.box!.height - rowSpannedHeight; + if (remainingRowLineHeight > 0) { + // Add remaining row line height, if cell is spanning over multiple rows + final distributedCellHeight = remainingRowLineHeight / rowSpan; + lineHeight += distributedCellHeight; + for (var r = pageRowIndex; r < pageRowIndex + rowSpan; r++) { + _heights[r] += distributedCellHeight; + } + } + } else { + lineHeight = math.max(lineHeight, cell.box!.height); } - lineHeight = math.max(lineHeight, rowLineHeight); } - assert(widths[colIndex]! > 0.0); x += widths[colIndex]!; } + _heights[pageRowIndex] = lineHeight; + final align = row.verticalAlignment ?? defaultVerticalAlignment; if (align == TableCellVerticalAlignment.full) { - // Compute the layout again to give the full height to all cells - // Need to compute the width also again, just in case height had an impact on intrinsic width. + // Compute the layout again to give the full height to all cells in this row (as lineHeight may has changed on later columns) x = 0; for (var colIndex = 0; colIndex < unspannedRow.length; colIndex++) { final (colSpan, rowSpan, spannedColIndex) = unspannedRow[colIndex]; if (spannedColIndex != null) { final cell = children[rowIndex].children[spannedColIndex]; final spannedWidth = _getSpannedWidth(colIndex, colSpan, widths); + final rowSpannedHeight = _getSpannedHeight(pageRowIndex, rowSpan); final childConstraints = BoxConstraints.tightFor( - width: spannedWidth, height: lineHeight); + width: spannedWidth, height: rowSpannedHeight); cell.layout(context, childConstraints); assert(cell.box != null); cell.box = cell.box!.copyWith(x: x, y: totalHeight); @@ -527,15 +574,15 @@ class Table extends Widget with SpanningWidget { } if (totalHeight + lineHeight > constraints.maxHeight) { + // In the second run, heights can still grow (but not shrink), so check again _context.lastLine = rowIndex; break; - } else { - _context.lastLine = rowIndex + 1; } totalHeight += lineHeight; - _heights.add(lineHeight); + pageRowIndex++; } + pageRowIndex = 0; // Compute final y position for (var rowIndex = 0; rowIndex < children.length && rowIndex < _context.lastLine; @@ -549,18 +596,19 @@ class Table extends Widget with SpanningWidget { for (final child in row.children) { double? childY; + final rowSpan = child is TableCell ? child.rowSpan : 1; + // Inverse height, now that the totalHeight is known. switch (align) { case TableCellVerticalAlignment.bottom: childY = totalHeight - child.box!.y - - _getHeight(rowIndex - _context.firstLine); + _getSpannedHeight(pageRowIndex, rowSpan); break; case TableCellVerticalAlignment.middle: childY = totalHeight - child.box!.y - - (_getHeight(rowIndex - _context.firstLine) + - child.box!.height) / + (_getSpannedHeight(pageRowIndex, rowSpan) + child.box!.height) / 2; break; case TableCellVerticalAlignment.top: @@ -571,6 +619,7 @@ class Table extends Widget with SpanningWidget { child.box = child.box!.copyWith(y: childY); } + pageRowIndex++; } box = PdfRect(0, 0, totalWidth, totalHeight); @@ -649,6 +698,7 @@ class Table extends Widget with SpanningWidget { if (border != null) { // Paint inside borders final tableCells = _getTableSpanMatrix(); + var pageRowIndex = 0; for (var rowIndex = 0; rowIndex < children.length && rowIndex < _context.lastLine; rowIndex++) { @@ -657,23 +707,27 @@ class Table extends Widget with SpanningWidget { continue; } + // Cell top may is different from the inner cellBox.top because of their alignment. + final rowTop = box!.height - _getSpannedHeight(0, pageRowIndex); + for (var spannedColIndex = 0; spannedColIndex < row.children.length; spannedColIndex++) { - final cellBox = row.children[spannedColIndex].box!; + final cell = row.children[spannedColIndex]; + final cellBox = cell.box!; if (border!.verticalInside.style.paint && spannedColIndex != tableCells[rowIndex].first.$3) { border!.verticalInside.style.setStyle(context); - // Use the height of the current row to determine the bottom of box, + // Use the height(s) of the (spanned) row to determine the bottom of box, // otherwise it will draw gaps for cells which have a smaller height. - // Or use height, if cell spans over multiple rows. context.canvas.moveTo( cellBox.x, - cellBox.top - - math.max(_getHeight(rowIndex - _context.firstLine), - cellBox.height)); - context.canvas.lineTo(cellBox.x, cellBox.top); + rowTop - + (cell is TableCell + ? _getSpannedHeight(pageRowIndex, cell.rowSpan) + : _getHeight(pageRowIndex))); + context.canvas.lineTo(cellBox.x, rowTop); context.canvas.setStrokeColor(border!.verticalInside.color); context.canvas.setLineWidth(border!.verticalInside.width); context.canvas.strokePath(); @@ -681,14 +735,15 @@ class Table extends Widget with SpanningWidget { } if (border!.horizontalInside.style.paint && row != children.first) { border!.horizontalInside.style.setStyle(context); - context.canvas.moveTo(cellBox.left, cellBox.top); - context.canvas.lineTo(cellBox.right, cellBox.top); + context.canvas.moveTo(cellBox.left, rowTop); + context.canvas.lineTo(cellBox.right, rowTop); context.canvas.setStrokeColor(border!.horizontalInside.color); context.canvas.setLineWidth(border!.horizontalInside.width); context.canvas.strokePath(); border!.horizontalInside.style.unsetStyle(context); } } + pageRowIndex++; } } context.canvas.restoreContext(); @@ -704,4 +759,13 @@ class Table extends Widget with SpanningWidget { ? _heights[heightIndex] : 0.0; } + + double _getSpannedHeight(int startIndex, int length) { + if (length <= 0) { + return 0; + } + return _heights + .sublist(startIndex, startIndex + length) + .reduce((prev, next) => prev + next); + } } diff --git a/pdf/test/widget_table_test.dart b/pdf/test/widget_table_test.dart index a50f266c..d5cbc96b 100644 --- a/pdf/test/widget_table_test.dart +++ b/pdf/test/widget_table_test.dart @@ -216,7 +216,7 @@ void main() { ), headerHeight: 25, cellHeight: 40, - headerStyle: TextStyle( + headerStyle: const TextStyle( color: PdfColors.white, fontWeight: FontWeight.bold, ), @@ -294,6 +294,7 @@ void main() { build: (Context context) => Table( children: [ TableRow( + verticalAlignment: TableCellVerticalAlignment.middle, children: [ Container(color: PdfColors.blue, height: 20), Container(color: PdfColors.red, height: 20), @@ -318,6 +319,7 @@ void main() { ], ), TableRow( + verticalAlignment: TableCellVerticalAlignment.bottom, children: [ Container(color: PdfColors.red, height: 20), _buildSpanCell( @@ -330,10 +332,11 @@ void main() { ), TableRow( children: [ - _buildSpanCell(rowSpan: 2, color: PdfColors.green, height: 40), + _buildSpanCell(rowSpan: 2, color: PdfColors.green, height: 60), ], ), TableRow( + verticalAlignment: TableCellVerticalAlignment.full, children: [ Container(color: PdfColors.blue, height: 20), _buildSpanCell(rowSpan: 2, color: PdfColors.red), diff --git a/test/golden/widgets-table.pdf b/test/golden/widgets-table.pdf index f364ece49483a909d57756ec13574e35330073ec..e423eed801ec99e80ac0cfbf531711981fb625d9 100644 GIT binary patch delta 15769 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 delta 15972 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 From 2e360829bcbdef1567653a672d1bc6147ee5e027 Mon Sep 17 00:00:00 2001 From: Gustl22 Date: Tue, 25 Feb 2025 21:35:24 +0100 Subject: [PATCH 07/11] remove unnecessary nullables --- pdf/lib/src/widgets/table.dart | 38 +++++++++++++++++----------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/pdf/lib/src/widgets/table.dart b/pdf/lib/src/widgets/table.dart index 39b2d1df..b6d98ccc 100644 --- a/pdf/lib/src/widgets/table.dart +++ b/pdf/lib/src/widgets/table.dart @@ -138,8 +138,8 @@ class TableContext extends WidgetContext { class ColumnLayout { ColumnLayout(this.width, this.flex); - final double? width; - final double? flex; + final double width; + final double flex; } abstract class TableColumnWidth { @@ -161,7 +161,7 @@ class IntrinsicColumnWidth extends TableColumnWidth { BoxConstraints constraints, ) { if (flex != null) { - return ColumnLayout(0, flex); + return ColumnLayout(0, flex!); } child.layout(context, const BoxConstraints()); @@ -391,8 +391,8 @@ class Table extends Widget with SpanningWidget { bool parentUsesSize = false, }) { // Compute required width for all row/columns width flex - final flex = []; - final widths = []; + final flex = []; + final widths = []; _heights.clear(); final tableCells = _getTableSpanMatrix(); @@ -419,12 +419,12 @@ class Table extends Widget with SpanningWidget { flex.add(columnLayout.flex); widths.add(columnLayout.width); } else { - if (columnLayout.flex! > 0) { + if (columnLayout.flex > 0) { flex[unspannedColIndex] = - math.max(flex[unspannedColIndex]!, columnLayout.flex!); + math.max(flex[unspannedColIndex], columnLayout.flex); } widths[unspannedColIndex] = - math.max(widths[unspannedColIndex]!, columnLayout.width!); + math.max(widths[unspannedColIndex], columnLayout.width); } } } @@ -438,16 +438,16 @@ class Table extends Widget with SpanningWidget { // Compute column widths using flex and estimated width if (constraints.hasBoundedWidth) { - final totalFlex = flex.reduce((double? a, double? b) => a! + b!)!; + final totalFlex = flex.reduce((double? a, double? b) => a! + b!); var flexSpace = 0.0; for (var n = 0; n < widths.length; n++) { if (flex[n] == 0.0) { - final newWidth = widths[n]! / maxWidth! * constraints.maxWidth; + final newWidth = widths[n] / maxWidth * constraints.maxWidth; if ((tableWidth == TableWidth.max && totalFlex == 0.0) || - newWidth < widths[n]!) { + newWidth < widths[n]) { widths[n] = newWidth; } - flexSpace += widths[n]!; + flexSpace += widths[n]; } } final spacePerFlex = totalFlex > 0.0 @@ -455,14 +455,14 @@ class Table extends Widget with SpanningWidget { : double.nan; for (var n = 0; n < widths.length; n++) { - if (flex[n]! > 0.0) { - final newWidth = spacePerFlex * flex[n]!; + if (flex[n] > 0.0) { + final newWidth = spacePerFlex * flex[n]; widths[n] = newWidth; } } } - final totalWidth = widths.reduce((double? a, double? b) => a! + b!)!; + final totalWidth = widths.reduce((double? a, double? b) => a! + b!); // Compute widths and heights var totalHeight = 0.0; @@ -492,8 +492,8 @@ class Table extends Widget with SpanningWidget { lineHeight = math.max(lineHeight, cell.box!.height); } } - assert(widths[colIndex]! > 0.0); - x += widths[colIndex]!; + assert(widths[colIndex] > 0.0); + x += widths[colIndex]; } if (totalHeight + lineHeight > constraints.maxHeight) { @@ -551,7 +551,7 @@ class Table extends Widget with SpanningWidget { lineHeight = math.max(lineHeight, cell.box!.height); } } - x += widths[colIndex]!; + x += widths[colIndex]; } _heights[pageRowIndex] = lineHeight; @@ -573,7 +573,7 @@ class Table extends Widget with SpanningWidget { assert(cell.box != null); cell.box = cell.box!.copyWith(x: x, y: totalHeight); } - x += widths[colIndex]!; + x += widths[colIndex]; } } From ca5e11d0872a004a7e3367e746929a71fb1bdc04 Mon Sep 17 00:00:00 2001 From: Gustl22 Date: Tue, 25 Feb 2025 22:50:45 +0100 Subject: [PATCH 08/11] avoid nullables in reduce --- pdf/lib/src/widgets/table.dart | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pdf/lib/src/widgets/table.dart b/pdf/lib/src/widgets/table.dart index b6d98ccc..19e4e368 100644 --- a/pdf/lib/src/widgets/table.dart +++ b/pdf/lib/src/widgets/table.dart @@ -434,11 +434,11 @@ class Table extends Widget with SpanningWidget { return; } - final maxWidth = widths.reduce((double? a, double? b) => a! + b!); + final maxWidth = widths.reduce((double a, double b) => a + b); // Compute column widths using flex and estimated width if (constraints.hasBoundedWidth) { - final totalFlex = flex.reduce((double? a, double? b) => a! + b!); + final totalFlex = flex.reduce((double a, double b) => a + b); var flexSpace = 0.0; for (var n = 0; n < widths.length; n++) { if (flex[n] == 0.0) { @@ -462,7 +462,7 @@ class Table extends Widget with SpanningWidget { } } - final totalWidth = widths.reduce((double? a, double? b) => a! + b!); + final totalWidth = widths.reduce((double a, double b) => a + b); // Compute widths and heights var totalHeight = 0.0; From c9df77fc8b952425f311da856acefd63d2fa2ecc Mon Sep 17 00:00:00 2001 From: Gustl22 Date: Tue, 25 Feb 2025 23:57:50 +0100 Subject: [PATCH 09/11] unsafe --- pdf/lib/src/widgets/table.dart | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/pdf/lib/src/widgets/table.dart b/pdf/lib/src/widgets/table.dart index 19e4e368..bd3b89f2 100644 --- a/pdf/lib/src/widgets/table.dart +++ b/pdf/lib/src/widgets/table.dart @@ -337,7 +337,8 @@ class Table extends Widget with SpanningWidget { // <= , because we have to look one column ahead to check if the cell from the previous row had a rowspan. spannedColIndex <= row.children.length; spannedColIndex++) { - if (previousSpansOfRow.length > unspannedColIndex) { + // Iterate through previous row cells and look for spans + while (previousSpansOfRow.length > unspannedColIndex) { final (previousColSpan, previousRowSpan, previousCell) = previousSpansOfRow[unspannedColIndex]; if (previousRowSpan > 1) { @@ -346,6 +347,8 @@ class Table extends Widget with SpanningWidget { spansOfRow.add((colSpan, previousRowSpan - 1, null)); unspannedColIndex++; } + } else { + break; } } if (spannedColIndex < row.children.length) { @@ -403,9 +406,7 @@ class Table extends Widget with SpanningWidget { unspannedColIndex++) { final spannedColIndex = unspannedRow[unspannedColIndex].$3; final columnWidth = - columnWidths != null && columnWidths![unspannedColIndex] != null - ? columnWidths![unspannedColIndex]! - : defaultColumnWidth; + columnWidths?[unspannedColIndex] ?? defaultColumnWidth; // TODO(Gustl22): Handle intrinsic column widths: // Currently, every cell is calculated by filling the remaining spanned // cells with empty containers and then sum up their calculated widths. From 2c0c81362bf6b1bfb045cb175afd80d9618bbcde Mon Sep 17 00:00:00 2001 From: Gustl22 Date: Wed, 26 Feb 2025 08:50:50 +0100 Subject: [PATCH 10/11] update test pdf --- pdf/test/widget_table_test.dart | 14 ++++++++++++++ test/golden/widgets-table.pdf | Bin 78470 -> 78870 bytes 2 files changed, 14 insertions(+) diff --git a/pdf/test/widget_table_test.dart b/pdf/test/widget_table_test.dart index d5cbc96b..e7c71ff6 100644 --- a/pdf/test/widget_table_test.dart +++ b/pdf/test/widget_table_test.dart @@ -348,6 +348,20 @@ void main() { Container(color: PdfColors.green, height: 20), ], ), + TableRow( + verticalAlignment: TableCellVerticalAlignment.full, + children: [ + _buildSpanCell(rowSpan: 2, color: PdfColors.blue), + _buildSpanCell(rowSpan: 2, color: PdfColors.red), + Container(color: PdfColors.green), + ], + ), + TableRow( + verticalAlignment: TableCellVerticalAlignment.full, + children: [ + Container(color: PdfColors.blue), + ], + ), ], border: TableBorder.all(), columnWidths: { diff --git a/test/golden/widgets-table.pdf b/test/golden/widgets-table.pdf index e423eed801ec99e80ac0cfbf531711981fb625d9..58e003807f05224a19647a30d981af1efd1efe61 100644 GIT binary patch delta 2191 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 ai{H8hW Date: Wed, 26 Feb 2025 09:43:01 +0100 Subject: [PATCH 11/11] update golden --- test/golden/widgets-table.pdf | Bin 78870 -> 78870 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/test/golden/widgets-table.pdf b/test/golden/widgets-table.pdf index 58e003807f05224a19647a30d981af1efd1efe61..b7d2453d09a090eb6c4f35d08b30a933421be6d7 100644 GIT binary patch delta 149 zcmbu%+YNvq3;@6o9SB;XkQjG?KGx7Fn1sZY7(;gO@4l|jz0ds_4&Y`fa^#dyeO&;i n%+Uh0qz$!3pMs~VNGQ@QDCZKfm=SvpNaZ?z4cjW-0j{|ZKI$ub delta 149 zcmbu%fenBl3;?hYJqQ+HTVniWW8)3If=ftzi8J&EdqBt9$J*~104~6Wq$*L|QwIfZ mR*MzI#L3Zks|2(@6&Epc}eAs1rGb{@Zm?JJ%MLBk772P=mF