@@ -326,8 +326,6 @@ public LayoutResult layout(LayoutContext layoutContext) {
326
326
bordersHandler .fixHeaderOccupiedArea (occupiedArea .getBBox (), layoutBox );
327
327
}
328
328
329
-
330
- bordersHandler .setTableBoundingBorders (getBorders ());
331
329
topBorderMaxWidth = bordersHandler .getMaxTopWidth ();
332
330
bordersHandler .applyLeftAndRightTableBorder (layoutBox , false );
333
331
// Table should have a row and some child elements in order to be considered non empty
@@ -474,8 +472,10 @@ public LayoutResult layout(LayoutContext layoutContext) {
474
472
overflowRenderer .setProperty (Property .MARGIN_BOTTOM , 0 );
475
473
overflowRenderer .setProperty (Property .MARGIN_LEFT , 0 );
476
474
overflowRenderer .setProperty (Property .MARGIN_RIGHT , 0 );
477
- overflowRenderer .deleteOwnProperty (Property .BORDER_BOTTOM );
478
-
475
+ // we've already applied the top table border on header
476
+ if (null != headerRenderer ) {
477
+ overflowRenderer .setProperty (Property .BORDER_TOP , Border .NO_BORDER );
478
+ }
479
479
overflowRenderer .rowRange = new Table .RowRange (0 , rows .size () - row - 1 );
480
480
overflowRenderer .bordersHandler = bordersHandler ;
481
481
// save old bordersHandler properties
@@ -572,8 +572,6 @@ public LayoutResult layout(LayoutContext layoutContext) {
572
572
boolean skip = false ;
573
573
if (null != footerRenderer && tableModel .isComplete () && tableModel .isSkipLastFooter () && !split ) {
574
574
footerRenderer = null ;
575
- // delete #layout() related properties
576
- deleteOwnProperty (Property .BORDER_BOTTOM );
577
575
if (tableModel .isEmpty ()) {
578
576
this .deleteOwnProperty (Property .BORDER_TOP );
579
577
}
@@ -596,6 +594,9 @@ public LayoutResult layout(LayoutContext layoutContext) {
596
594
prepareFooterOrHeaderRendererForLayout (footerRenderer , layoutBox .getWidth ());
597
595
598
596
bordersHandler .collapseTableWithFooter (footerRenderer .bordersHandler , hasContent || 0 != childRenderers .size ());
597
+ if (bordersHandler instanceof CollapsedTableBorders ) {
598
+ footerRenderer .setBorders (CollapsedTableBorders .getCollapsedBorder (footerRenderer .getBorders ()[2 ], getBorders ()[2 ]), 2 );
599
+ }
599
600
footerRenderer .layout (new LayoutContext (new LayoutArea (area .getPageNumber (), layoutBox )));
600
601
bordersHandler .applyLeftAndRightTableBorder (layoutBox , false );
601
602
float footerHeight = footerRenderer .getOccupiedAreaBBox ().getHeight ();
@@ -873,7 +874,7 @@ public LayoutResult layout(LayoutContext layoutContext) {
873
874
// we should process incomplete table's footer only dureing splitting
874
875
if (!tableModel .isComplete () && null != footerRenderer ) {
875
876
footerRenderer = null ;
876
- bordersHandler .skipFooter (getBorders () );
877
+ bordersHandler .skipFooter (bordersHandler . tableBoundingBorders );
877
878
}
878
879
adjustFooterAndFixOccupiedArea (layoutBox );
879
880
removeUnnecessaryFloatRendererAreas (floatRendererAreas );
@@ -1337,7 +1338,7 @@ protected void drawBorders(DrawContext drawContext, boolean hasHeader, boolean h
1337
1338
1338
1339
// process halves of the borders here
1339
1340
if (childRenderers .size () == 0 ) {
1340
- Border [] borders = this . getBorders () ;
1341
+ Border [] borders = bordersHandler . tableBoundingBorders ;
1341
1342
if (null != borders [0 ]) {
1342
1343
if (null != borders [2 ]) {
1343
1344
if (0 == heights .size ()) {
@@ -1437,7 +1438,7 @@ private void applyFixedXOrYPosition(boolean isXPosition, Rectangle layoutBox) {
1437
1438
if (isFixedLayout ()) {
1438
1439
if (isXPosition ) {
1439
1440
float x = (float ) this .getPropertyAsFloat (Property .X );
1440
- layoutBox .setX ( x );
1441
+ layoutBox .setX (x );
1441
1442
} else {
1442
1443
float y = (float ) this .getPropertyAsFloat (Property .Y );
1443
1444
move (0 , y - occupiedArea .getBBox ().getY ());
@@ -1471,7 +1472,8 @@ private void correctLayoutedCellsOccupiedAreas(LayoutResult[] splits, int row, i
1471
1472
bordersHandler .setFinishRow (finish );
1472
1473
if (skip ) {
1473
1474
// Update bordersHandler
1474
- bordersHandler .skipFooter (getBorders ());
1475
+ bordersHandler .tableBoundingBorders [2 ] = getBorders ()[2 ];
1476
+ bordersHandler .skipFooter (bordersHandler .tableBoundingBorders );
1475
1477
}
1476
1478
float currentBottomIndent = null == currentBorder ? 0 : currentBorder .getWidth ();
1477
1479
float realBottomIndent = bordersHandler .getMaxBottomWidth ();
@@ -1603,20 +1605,18 @@ private TableRenderer initFooterOrHeaderRenderer(boolean footer, Border[] tableB
1603
1605
Border [] borders = renderer .getBorders ();
1604
1606
if (table .isEmpty ()) {
1605
1607
renderer .setBorders (CollapsedTableBorders .getCollapsedBorder (borders [innerBorder ], tableBorders [innerBorder ]), innerBorder );
1606
- setBorders ( Border .NO_BORDER , innerBorder ) ;
1608
+ bordersHandler . tableBoundingBorders [ innerBorder ] = Border .NO_BORDER ;
1607
1609
}
1608
1610
renderer .setBorders (CollapsedTableBorders .getCollapsedBorder (borders [1 ], tableBorders [1 ]), 1 );
1609
1611
renderer .setBorders (CollapsedTableBorders .getCollapsedBorder (borders [3 ], tableBorders [3 ]), 3 );
1610
1612
renderer .setBorders (CollapsedTableBorders .getCollapsedBorder (borders [outerBorder ], tableBorders [outerBorder ]), outerBorder );
1611
- setBorders ( Border .NO_BORDER , outerBorder ) ;
1613
+ bordersHandler . tableBoundingBorders [ outerBorder ] = Border .NO_BORDER ;
1612
1614
1613
1615
renderer .bordersHandler = new CollapsedTableBorders (renderer .rows , ((Table ) renderer .getModelElement ()).getNumberOfColumns (), renderer .getBorders ());
1614
1616
renderer .bordersHandler .initializeBorders ();
1615
1617
renderer .bordersHandler .setRowRange (renderer .rowRange .getStartRow (), renderer .rowRange .getFinishRow ());
1616
1618
((CollapsedTableBorders ) renderer .bordersHandler ).collapseAllBordersAndEmptyRows ();
1617
1619
renderer .correctRowRange ();
1618
- // update bounding borders
1619
- bordersHandler .setTableBoundingBorders (getBorders ());
1620
1620
return renderer ;
1621
1621
}
1622
1622
0 commit comments