@@ -72,30 +72,32 @@ public ListRenderer(com.itextpdf.layout.element.List modelElement) {
72
72
73
73
@ Override
74
74
public LayoutResult layout (LayoutContext layoutContext ) {
75
- List <IRenderer > symbolRenderers = new ArrayList <>();
76
- int listItemNum = getProperty (Property .LIST_START , 1 );
77
- for (int i = 0 ; i < childRenderers .size (); i ++) {
78
- if (childRenderers .get (i ).getModelElement () instanceof ListItem ) {
79
- IRenderer currentSymbolRenderer = makeListSymbolRenderer (listItemNum ++, childRenderers .get (i ));
80
- symbolRenderers .add (currentSymbolRenderer );
81
- LayoutResult listSymbolLayoutResult = currentSymbolRenderer .layout (layoutContext );
82
- if (listSymbolLayoutResult .getStatus () != LayoutResult .FULL ) {
83
- return new LayoutResult (LayoutResult .NOTHING , null , null , this );
75
+ if (!hasOwnProperty (Property .LIST_SYMBOLS_INITIALIZED )) {
76
+ List <IRenderer > symbolRenderers = new ArrayList <>();
77
+ int listItemNum = getProperty (Property .LIST_START , 1 );
78
+ for (int i = 0 ; i < childRenderers .size (); i ++) {
79
+ if (childRenderers .get (i ).getModelElement () instanceof ListItem ) {
80
+ IRenderer currentSymbolRenderer = makeListSymbolRenderer (listItemNum ++, childRenderers .get (i ));
81
+ symbolRenderers .add (currentSymbolRenderer );
82
+ LayoutResult listSymbolLayoutResult = currentSymbolRenderer .layout (layoutContext );
83
+ if (listSymbolLayoutResult .getStatus () != LayoutResult .FULL ) {
84
+ return new LayoutResult (LayoutResult .NOTHING , null , null , this );
85
+ }
84
86
}
85
87
}
86
- }
87
- float maxSymbolWidth = 0 ;
88
- for ( IRenderer symbolRenderer : symbolRenderers ) {
89
- maxSymbolWidth = Math . max ( maxSymbolWidth , symbolRenderer . getOccupiedArea (). getBBox (). getWidth ());
90
- }
91
- Float symbolIndent = modelElement . getProperty ( Property . LIST_SYMBOL_INDENT ) ;
92
- listItemNum = 0 ;
93
- for ( IRenderer childRenderer : childRenderers ) {
94
- childRenderer .deleteOwnProperty (Property .MARGIN_LEFT );
95
- childRenderer . setProperty ( Property . MARGIN_LEFT , childRenderer . getProperty ( Property . MARGIN_LEFT , 0f ) + maxSymbolWidth + ( symbolIndent != null ? symbolIndent : 0f ));
96
- if ( childRenderer . getModelElement () instanceof ListItem ) {
97
- IRenderer symbolRenderer = symbolRenderers . get ( listItemNum ++ );
98
- (( ListItemRenderer ) childRenderer ). addSymbolRenderer ( symbolRenderer , maxSymbolWidth );
88
+ float maxSymbolWidth = 0 ;
89
+ for ( IRenderer symbolRenderer : symbolRenderers ) {
90
+ maxSymbolWidth = Math . max ( maxSymbolWidth , symbolRenderer . getOccupiedArea (). getBBox (). getWidth ());
91
+ }
92
+ Float symbolIndent = modelElement . getProperty ( Property . LIST_SYMBOL_INDENT );
93
+ listItemNum = 0 ;
94
+ for ( IRenderer childRenderer : childRenderers ) {
95
+ childRenderer . deleteOwnProperty ( Property . MARGIN_LEFT );
96
+ childRenderer .setProperty (Property .MARGIN_LEFT , childRenderer . getProperty ( Property . MARGIN_LEFT , 0f ) + maxSymbolWidth + ( symbolIndent != null ? symbolIndent : 0f ) );
97
+ if ( childRenderer . getModelElement () instanceof ListItem ) {
98
+ IRenderer symbolRenderer = symbolRenderers . get ( listItemNum ++);
99
+ (( ListItemRenderer ) childRenderer ). addSymbolRenderer ( symbolRenderer , maxSymbolWidth );
100
+ }
99
101
}
100
102
}
101
103
@@ -107,6 +109,20 @@ public IRenderer getNextRenderer() {
107
109
return new ListRenderer ((com .itextpdf .layout .element .List ) modelElement );
108
110
}
109
111
112
+ @ Override
113
+ protected AbstractRenderer createSplitRenderer (int layoutResult ) {
114
+ AbstractRenderer splitRenderer = super .createSplitRenderer (layoutResult );
115
+ splitRenderer .setProperty (Property .LIST_SYMBOLS_INITIALIZED , Boolean .valueOf (true ));
116
+ return splitRenderer ;
117
+ }
118
+
119
+ @ Override
120
+ protected AbstractRenderer createOverflowRenderer (int layoutResult ) {
121
+ AbstractRenderer overflowRenderer = super .createOverflowRenderer (layoutResult );
122
+ overflowRenderer .setProperty (Property .LIST_SYMBOLS_INITIALIZED , Boolean .valueOf (true ));
123
+ return overflowRenderer ;
124
+ }
125
+
110
126
protected IRenderer makeListSymbolRenderer (int index , IRenderer renderer ) {
111
127
Object defaultListSymbol = renderer .getProperty (Property .LIST_SYMBOL );
112
128
if (defaultListSymbol instanceof Text ) {
0 commit comments