@@ -25,30 +25,46 @@ This file is part of the iText (R) project.
25
25
import com .itextpdf .io .font .constants .StandardFonts ;
26
26
import com .itextpdf .io .image .ImageDataFactory ;
27
27
import com .itextpdf .kernel .font .PdfFontFactory ;
28
+ import com .itextpdf .kernel .geom .PageSize ;
28
29
import com .itextpdf .kernel .geom .Rectangle ;
30
+ import com .itextpdf .kernel .pdf .PdfDocument ;
31
+ import com .itextpdf .kernel .pdf .PdfWriter ;
32
+ import com .itextpdf .kernel .utils .CompareTool ;
33
+ import com .itextpdf .layout .Document ;
34
+ import com .itextpdf .layout .element .AreaBreak ;
29
35
import com .itextpdf .layout .element .Div ;
30
36
import com .itextpdf .layout .element .Image ;
31
37
import com .itextpdf .layout .element .Paragraph ;
32
38
import com .itextpdf .layout .element .Table ;
33
39
import com .itextpdf .layout .element .Text ;
34
40
import com .itextpdf .layout .layout .LayoutArea ;
35
41
import com .itextpdf .layout .layout .LayoutContext ;
42
+ import com .itextpdf .layout .layout .LayoutResult ;
36
43
import com .itextpdf .layout .property .Property ;
37
44
import com .itextpdf .layout .property .UnitValue ;
38
45
import com .itextpdf .layout .splitting .DefaultSplitCharacters ;
39
46
import com .itextpdf .test .ExtendedITextTest ;
40
47
import com .itextpdf .test .annotations .type .IntegrationTest ;
48
+
49
+ import java .io .IOException ;
41
50
import org .junit .Assert ;
51
+ import org .junit .BeforeClass ;
42
52
import org .junit .Test ;
43
53
import org .junit .experimental .categories .Category ;
44
54
45
- import java .io .IOException ;
46
-
47
55
@ Category (IntegrationTest .class )
48
56
public class TargetCounterHandlerTest extends ExtendedITextTest {
49
57
58
+ public static final String SOURCE_FOLDER = "./src/test/resources/com/itextpdf/layout/renderer/TargetCounterHandlerTest/" ;
59
+ public static final String DESTINATION_FOLDER = "./target/test/com/itextpdf/layout/renderer/TargetCounterHandlerTest/" ;
60
+
61
+ @ BeforeClass
62
+ public static void beforeClass () {
63
+ createDestinationFolder (DESTINATION_FOLDER );
64
+ }
65
+
50
66
@ Test
51
- public void BlockRendererAddByIDTest () {
67
+ public void blockRendererAddByIDTest () {
52
68
DocumentRenderer documentRenderer = new DocumentRenderer (null );
53
69
DivRenderer divRenderer = new DivRenderer (new Div ());
54
70
divRenderer .setParent (documentRenderer );
@@ -62,7 +78,7 @@ public void BlockRendererAddByIDTest() {
62
78
}
63
79
64
80
@ Test
65
- public void TextRendererAddByIDTest () throws IOException {
81
+ public void textRendererAddByIDTest () throws IOException {
66
82
DocumentRenderer documentRenderer = new DocumentRenderer (null );
67
83
TextRenderer textRenderer = new TextRenderer (new Text ("a" ));
68
84
@@ -84,7 +100,7 @@ public void TextRendererAddByIDTest() throws IOException {
84
100
}
85
101
86
102
@ Test
87
- public void TableRendererAddByIDTest () {
103
+ public void tableRendererAddByIDTest () {
88
104
DocumentRenderer documentRenderer = new DocumentRenderer (null );
89
105
TableRenderer tableRenderer = new TableRenderer (new Table (5 ));
90
106
tableRenderer .setParent (documentRenderer );
@@ -98,7 +114,7 @@ public void TableRendererAddByIDTest() {
98
114
}
99
115
100
116
@ Test
101
- public void ParagraphRendererAddByIDTest () {
117
+ public void paragraphRendererAddByIDTest () {
102
118
DocumentRenderer documentRenderer = new DocumentRenderer (null );
103
119
ParagraphRenderer paragraphRenderer = new ParagraphRenderer (new Paragraph ());
104
120
paragraphRenderer .setParent (documentRenderer );
@@ -112,7 +128,7 @@ public void ParagraphRendererAddByIDTest() {
112
128
}
113
129
114
130
@ Test
115
- public void ImageRendererAddByIDTest () {
131
+ public void imageRendererAddByIDTest () {
116
132
DocumentRenderer documentRenderer = new DocumentRenderer (null );
117
133
ImageRenderer imageRenderer = new ImageRenderer (new Image (ImageDataFactory .createRawImage (new byte []{50 , 21 })));
118
134
imageRenderer .setParent (documentRenderer );
@@ -126,7 +142,7 @@ public void ImageRendererAddByIDTest() {
126
142
}
127
143
128
144
@ Test
129
- public void LineRendererAddByIDTest () {
145
+ public void lineRendererAddByIDTest () {
130
146
DocumentRenderer documentRenderer = new DocumentRenderer (null );
131
147
LineRenderer lineRenderer = new LineRenderer ();
132
148
lineRenderer .setParent (documentRenderer );
@@ -138,4 +154,69 @@ public void LineRendererAddByIDTest() {
138
154
documentRenderer .getTargetCounterHandler ().prepareHandlerToRelayout ();
139
155
Assert .assertEquals ((Integer ) 4 , TargetCounterHandler .getPageByID (lineRenderer , id ));
140
156
}
157
+
158
+ @ Test
159
+ public void targetCounterHandlerEndToEndLayoutTest () throws IOException , InterruptedException {
160
+ String targetPdf = DESTINATION_FOLDER + "targetCounterHandlerEndToEndLayoutTest.pdf" ;
161
+ String cmpPdf = SOURCE_FOLDER + "cmp_targetCounterHandlerEndToEndLayoutTest.pdf" ;
162
+ Document document = new Document (new PdfDocument (new PdfWriter (targetPdf )),
163
+ PageSize .A4 , false );
164
+
165
+ Text pageNumPlaceholder = new Text ("x" );
166
+ String id = "1" ;
167
+ pageNumPlaceholder .setProperty (Property .ID , id );
168
+ pageNumPlaceholder .setNextRenderer (new TargetCounterAwareTextRenderer (pageNumPlaceholder ));
169
+ Paragraph intro = new Paragraph ("The paragraph is on page " ).add (pageNumPlaceholder );
170
+ document .add (intro );
171
+
172
+ document .add (new AreaBreak ());
173
+ Paragraph text = new Paragraph ("This is main text" );
174
+ text .setProperty (Property .ID , id );
175
+ text .setNextRenderer (new TargetCounterAwareParagraphRenderer (text ));
176
+ document .add (text );
177
+
178
+ document .relayout ();
179
+
180
+ document .close ();
181
+
182
+ Assert .assertNull (new CompareTool ().compareByContent (targetPdf , cmpPdf , DESTINATION_FOLDER , "diff" ));
183
+ }
184
+
185
+ private static class TargetCounterAwareTextRenderer extends TextRenderer {
186
+ public TargetCounterAwareTextRenderer (Text link ) {
187
+ super (link );
188
+ }
189
+
190
+ @ Override
191
+ public LayoutResult layout (LayoutContext layoutContext ) {
192
+ Integer targetPageNumber = TargetCounterHandler .getPageByID (this , this .<String >getProperty (Property .ID ));
193
+ if (targetPageNumber != null ) {
194
+ setText (String .valueOf (targetPageNumber ));
195
+ }
196
+ return super .layout (layoutContext );
197
+ }
198
+
199
+ @ Override
200
+ public IRenderer getNextRenderer () {
201
+ return new TargetCounterAwareTextRenderer ((Text ) getModelElement ());
202
+ }
203
+ }
204
+
205
+ private static class TargetCounterAwareParagraphRenderer extends ParagraphRenderer {
206
+ public TargetCounterAwareParagraphRenderer (Paragraph modelElement ) {
207
+ super (modelElement );
208
+ }
209
+
210
+ @ Override
211
+ public IRenderer getNextRenderer () {
212
+ return new TargetCounterAwareParagraphRenderer ((Paragraph ) modelElement );
213
+ }
214
+
215
+ @ Override
216
+ public LayoutResult layout (LayoutContext layoutContext ) {
217
+ LayoutResult result = super .layout (layoutContext );
218
+ TargetCounterHandler .addPageByID (this );
219
+ return result ;
220
+ }
221
+ }
141
222
}
0 commit comments