@@ -32,15 +32,19 @@ public void freeReferencesTest01() throws IOException {
32
32
String [] xrefString = extractXrefTableAsStrings (out );
33
33
String [] expected = new String [] {
34
34
"xref\n " +
35
- "0 5 \n " +
36
- "0000000010 65535 f \n " +
35
+ "0 15 \n " +
36
+ "0000000004 65535 f \n " +
37
37
"0000000269 00000 n \n " +
38
38
"0000000561 00000 n \n " +
39
39
"0000000314 00000 n \n " +
40
- "0000000011 65535 f \n " +
41
- "10 5\n " + // TODO first xref shall have no subsections
40
+ "0000000005 65535 f \n " +
41
+ "0000000006 00000 f \n " +
42
+ "0000000007 00000 f \n " +
43
+ "0000000008 00000 f \n " +
44
+ "0000000009 00000 f \n " +
45
+ "0000000010 00000 f \n " +
46
+ "0000000011 00000 f \n " +
42
47
"0000000000 00001 f \n " +
43
- "0000000000 00002 f \n " + // TODO linked list of refs is invalid
44
48
"0000000133 00000 n \n " +
45
49
"0000000015 00000 n \n " +
46
50
"0000000613 00000 n \n " };
@@ -54,7 +58,7 @@ public void freeReferencesTest02() throws IOException {
54
58
55
59
PdfDocument pdfDocument = new PdfDocument (new PdfReader (sourceFolder + src ), new PdfWriter (destinationFolder + out ),
56
60
new StampingProperties ().useAppendMode ());
57
- pdfDocument .close (); // TODO exception is thrown on attempt to read free reference
61
+ pdfDocument .close ();
58
62
59
63
String [] xrefString = extractXrefTableAsStrings (out );
60
64
String [] expected = new String [] {
@@ -73,8 +77,18 @@ public void freeReferencesTest02() throws IOException {
73
77
"0000000480 00000 n \n " ,
74
78
75
79
"xref\n " +
76
- "3 1\n " +
77
- "0000000995 00000 n \n " };
80
+ "0 1\n " +
81
+ "0000000004 65535 f \n " +
82
+ "3 9\n " +
83
+ "0000000995 00000 n \n " +
84
+ "0000000005 65535 f \n " +
85
+ "0000000006 00000 f \n " +
86
+ "0000000007 00000 f \n " +
87
+ "0000000008 00000 f \n " +
88
+ "0000000009 00000 f \n " +
89
+ "0000000010 00000 f \n " +
90
+ "0000000011 00000 f \n " +
91
+ "0000000000 00001 f \n " };
78
92
Assert .assertArrayEquals (expected , xrefString );
79
93
}
80
94
@@ -111,10 +125,13 @@ public void freeReferencesTest03() throws IOException {
111
125
"0000001303 00000 n \n " ,
112
126
113
127
"xref\n " +
114
- "1 3\n " +
128
+ "0 4\n " +
129
+ "0000000005 65535 f \n " +
115
130
"0000001706 00000 n \n " +
116
131
"0000001998 00000 n \n " +
117
132
"0000001751 00000 n \n " +
133
+ "5 1\n " +
134
+ "0000000000 00002 f \n " +
118
135
"8 2\n " +
119
136
"0000002055 00000 n \n " +
120
137
"0000002156 00000 n \n " };
@@ -133,9 +150,22 @@ public void freeReferencesTest04() throws IOException {
133
150
PdfIndirectReference contentsRef = (PdfIndirectReference ) contentsObj ;
134
151
contentsRef .setFree ();
135
152
PdfObject freedContentsRefRefersTo = contentsRef .getRefersTo ();
136
- Assert .assertNull (freedContentsRefRefersTo ); // TODO assertion fails. Free reference should not be reread, see freeReferencesTest02
153
+ Assert .assertNull (freedContentsRefRefersTo );
137
154
pdfDocument .close ();
138
155
156
+ String [] xrefString = extractXrefTableAsStrings (out );
157
+ String [] expected = new String [] {
158
+ "xref\n " +
159
+ "0 7\n " +
160
+ "0000000005 65535 f \n " +
161
+ "0000000133 00000 n \n " +
162
+ "0000000425 00000 n \n " +
163
+ "0000000178 00000 n \n " +
164
+ "0000000015 00000 n \n " +
165
+ "0000000000 00001 f \n " +
166
+ "0000000476 00000 n \n "
167
+ };
168
+ Assert .assertArrayEquals (expected , xrefString );
139
169
}
140
170
141
171
@ Test
@@ -148,13 +178,19 @@ public void freeReferencesTest05() throws IOException {
148
178
String [] xrefString = extractXrefTableAsStrings (out );
149
179
String [] expected = new String [] {
150
180
"xref\n " +
151
- "0 4 \n " +
152
- "0000000000 65535 f \n " +
181
+ "0 14 \n " +
182
+ "0000000004 65535 f \n " +
153
183
"0000000269 00000 n \n " +
154
184
"0000000561 00000 n \n " +
155
185
"0000000314 00000 n \n " +
156
- "11 3\n " +
157
- "0000000133 00000 n \n " + // TODO first xref shall have no subsections
186
+ "0000000005 00000 f \n " +
187
+ "0000000006 00000 f \n " +
188
+ "0000000007 00000 f \n " +
189
+ "0000000008 00000 f \n " +
190
+ "0000000009 00000 f \n " +
191
+ "0000000010 00000 f \n " +
192
+ "0000000000 00000 f \n " +
193
+ "0000000133 00000 n \n " +
158
194
"0000000015 00000 n \n " +
159
195
"0000000613 00000 n \n "
160
196
};
@@ -184,8 +220,17 @@ public void freeReferencesTest06() throws IOException {
184
220
"0000000480 00000 n \n " ,
185
221
186
222
"xref\n " +
187
- "3 1\n " +
188
- "0000000935 00000 n \n "
223
+ "0 1\n " +
224
+ "0000000004 65535 f \n " +
225
+ "3 8\n " +
226
+ "0000000935 00000 n \n " +
227
+ "0000000005 00000 f \n " +
228
+ "0000000006 00000 f \n " +
229
+ "0000000007 00000 f \n " +
230
+ "0000000008 00000 f \n " +
231
+ "0000000009 00000 f \n " +
232
+ "0000000010 00000 f \n " +
233
+ "0000000000 00000 f \n "
189
234
};
190
235
Assert .assertArrayEquals (expected , xrefString );
191
236
}
@@ -215,6 +260,46 @@ public void freeReferencesTest07() throws IOException {
215
260
Assert .assertArrayEquals (expected , xrefString );
216
261
}
217
262
263
+ @ Test
264
+ public void freeReferencesTest08 () throws IOException {
265
+ String src = "simpleDoc.pdf" ;
266
+ String out = "freeReferencesTest08.pdf" ;
267
+
268
+ PdfDocument pdfDocument = new PdfDocument (new PdfReader (sourceFolder + src ), new PdfWriter (destinationFolder + out ),
269
+ new StampingProperties ().useAppendMode ());
270
+ PdfObject contentsObj = pdfDocument .getPage (1 ).getPdfObject ().remove (PdfName .Contents );
271
+ pdfDocument .getPage (1 ).setModified ();
272
+ Assert .assertTrue (contentsObj instanceof PdfIndirectReference );
273
+
274
+ PdfIndirectReference contentsRef = (PdfIndirectReference ) contentsObj ;
275
+ contentsRef .setFree ();
276
+ PdfObject freedContentsRefRefersTo = contentsRef .getRefersTo ();
277
+ Assert .assertNull (freedContentsRefRefersTo );
278
+ pdfDocument .close ();
279
+
280
+ String [] xrefString = extractXrefTableAsStrings (out );
281
+ String [] expected = new String [] {
282
+ "xref\n " +
283
+ "0 7\n " +
284
+ "0000000000 65535 f \n " +
285
+ "0000000265 00000 n \n " +
286
+ "0000000564 00000 n \n " +
287
+ "0000000310 00000 n \n " +
288
+ "0000000132 00000 n \n " +
289
+ "0000000015 00000 n \n " +
290
+ "0000000476 00000 n \n " ,
291
+
292
+ "xref\n " +
293
+ "0 1\n " +
294
+ "0000000005 65535 f \n " +
295
+ "3 3\n " +
296
+ "0000000923 00000 n \n " +
297
+ "0000001170 00000 n \n " +
298
+ "0000000000 00001 f \n "
299
+ };
300
+ Assert .assertArrayEquals (expected , xrefString );
301
+ }
302
+
218
303
private String [] extractXrefTableAsStrings (String out ) throws IOException {
219
304
byte [] outPdfBytes = readFile (destinationFolder + out );
220
305
String outPdfContent = new String (outPdfBytes , StandardCharsets .US_ASCII );
0 commit comments