@@ -172,8 +172,6 @@ protected void writeXrefTableAndTrailer(PdfDocument document, PdfObject fileId,
172
172
for (Integer objNr : freeReferences ) {
173
173
xref [(int ) objNr ].genNr ++;
174
174
}
175
- freeReferences .clear ();
176
-
177
175
178
176
for (int i = count ; i > 0 ; --i ) {
179
177
PdfIndirectReference lastRef = xref [i ];
@@ -288,7 +286,17 @@ protected void writeXrefTableAndTrailer(PdfDocument document, PdfObject fileId,
288
286
for (int i = first ; i < first + len ; i ++) {
289
287
PdfIndirectReference reference = xrefTable .get (i );
290
288
291
- StringBuilder off = new StringBuilder ("0000000000" ).append (reference .getOffset ());
289
+ StringBuilder off = new StringBuilder ("0000000000" );
290
+ if (reference .isFree ()) {
291
+ if (!freeReferences .isEmpty ()) {
292
+ off .append (freeReferences .pollFirst ());
293
+ }
294
+ /* if (freeReferences.isEmpty()), then we are at the
295
+ last free reference. Its referral value must be object 0.
296
+ */
297
+ } else {
298
+ off .append (reference .getOffset ());
299
+ }
292
300
StringBuilder gen = new StringBuilder ("00000" ).append (reference .getGenNumber ());
293
301
writer .writeString (off .substring (off .length () - 10 , off .length ())).writeSpace ().
294
302
writeString (gen .substring (gen .length () - 5 , gen .length ())).writeSpace ();
@@ -317,6 +325,7 @@ protected void writeXrefTableAndTrailer(PdfDocument document, PdfObject fileId,
317
325
writer .write (document .getTrailer ());
318
326
writer .write ('\n' );
319
327
}
328
+ freeReferences .clear ();
320
329
writeKeyInfo (writer );
321
330
writer .writeString ("startxref\n " ).
322
331
writeLong (startxref ).
0 commit comments