@@ -53,6 +53,7 @@ This file is part of the iText (R) project.
53
53
import org .slf4j .Logger ;
54
54
import org .slf4j .LoggerFactory ;
55
55
56
+ import java .text .MessageFormat ;
56
57
import java .util .ArrayList ;
57
58
import java .util .Collections ;
58
59
import java .util .List ;
@@ -349,6 +350,7 @@ float[] autoLayout() {
349
350
float minTotalNonPercent = 0 ;
350
351
float fixedAddition = 0 ;
351
352
float flexibleAddition = 0 ;
353
+ boolean hasFlexibleCell = false ;
352
354
//sum of non fixed non percent columns.
353
355
for (int i = 0 ; i < numberOfColumns ; i ++) {
354
356
if (widths [i ].isPercent ) {
@@ -369,6 +371,7 @@ float[] autoLayout() {
369
371
fixedAddition += addition ;
370
372
} else {
371
373
flexibleAddition += addition ;
374
+ hasFlexibleCell = true ;
372
375
}
373
376
}
374
377
}
@@ -384,7 +387,7 @@ float[] autoLayout() {
384
387
}
385
388
} else {
386
389
float extraWidth = tableWidth - totalPercent - minTotalNonPercent ;
387
- if (fixedAddition > 0 && (extraWidth < fixedAddition || flexibleAddition == 0 )) {
390
+ if (fixedAddition > 0 && (extraWidth < fixedAddition || ! hasFlexibleCell )) {
388
391
for (int i = 0 ; i < numberOfColumns ; i ++) {
389
392
//only points could be fixed
390
393
if (widths [i ].isFixed ) {
@@ -596,13 +599,12 @@ private float[] getCellBorderIndents(CellInfo cell) {
596
599
TableRenderer renderer ;
597
600
if (cell .region == CellInfo .HEADER ) {
598
601
renderer = tableRenderer .headerRenderer ;
599
- } else if (cell .region == CellInfo .HEADER ) {
602
+ } else if (cell .region == CellInfo .FOOTER ) {
600
603
renderer = tableRenderer .footerRenderer ;
601
604
} else {
602
605
renderer = tableRenderer ;
603
606
}
604
607
return renderer .bordersHandler .getCellBorderIndents (cell .getRow (), cell .getCol (), cell .getRowspan (), cell .getColspan ());
605
-
606
608
}
607
609
608
610
private void fillAndSortCells () {
@@ -624,7 +626,7 @@ private void fillRendererCells(TableRenderer renderer, byte region) {
624
626
for (int col = 0 ; col < numberOfColumns ; col ++) {
625
627
CellRenderer cell = renderer .rows .get (row )[col ];
626
628
if (cell != null ) {
627
- cells .add (new CellInfo (cell , row , region ));
629
+ cells .add (new CellInfo (cell , row , col , region ));
628
630
}
629
631
}
630
632
}
@@ -769,33 +771,37 @@ private static class CellInfo implements Comparable<CellInfo> {
769
771
770
772
private final CellRenderer cell ;
771
773
private final int row ;
774
+ private final int col ;
772
775
private final byte region ;
773
776
774
- CellInfo (CellRenderer cell , int row , byte region ) {
777
+ CellInfo (CellRenderer cell , int row , int col , byte region ) {
775
778
this .cell = cell ;
776
779
this .region = region ;
780
+ //we cannot use getModelElement().getCol() or getRow(), because its may be changed during layout.
777
781
this .row = row ;
778
- //assert this.row != cell.getModelElement().getRow() ;
782
+ this .col = col ;
779
783
}
780
784
781
785
CellRenderer getCell () {
782
786
return cell ;
783
787
}
784
788
785
789
int getCol () {
786
- return cell . getModelElement (). getCol () ;
790
+ return col ;
787
791
}
788
792
789
793
int getColspan () {
790
- return cell .getModelElement ().getColspan ();
794
+ //we cannot use getModelElement().getColspan(), because it may be changed during layout.
795
+ return (int ) cell .getPropertyAsInteger (Property .COLSPAN );
791
796
}
792
797
793
798
int getRow () {
794
799
return row ;
795
800
}
796
801
797
802
int getRowspan () {
798
- return cell .getModelElement ().getRowspan ();
803
+ //we cannot use getModelElement().getRowspan(), because it may be changed during layout.
804
+ return (int ) cell .getPropertyAsInteger (Property .ROWSPAN );
799
805
}
800
806
801
807
@ Override
@@ -808,6 +814,20 @@ public int compareTo(CellInfo o) {
808
814
}
809
815
return region == o .region ? getRow () - o .getRow () : region - o .region ;
810
816
}
817
+
818
+ @ Override
819
+ public String toString () {
820
+ String str = MessageFormat .format ("row={0}, col={1}, rowspan={2}, colspan={3}, " ,
821
+ getRow (), getCol (), getRowspan (), getColspan ());
822
+ if (region == HEADER ) {
823
+ str += "header" ;
824
+ } else if (region == BODY ) {
825
+ str += "body" ;
826
+ } else if (region == FOOTER ) {
827
+ str += "footer" ;
828
+ }
829
+ return str ;
830
+ }
811
831
}
812
832
813
833
//endregion
0 commit comments