Skip to content

Commit 96f2e7b

Browse files
committed
PDFBOX-6176: fix the calculation of the highest object number as proposed by Daniel Persson
git-svn-id: https://svn.apache.org/repos/asf/pdfbox/trunk@1933041 13f79535-47bb-0310-9956-ffa450edef68
1 parent c4a5296 commit 96f2e7b

1 file changed

Lines changed: 12 additions & 7 deletions

File tree

pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/COSWriter.java

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -744,13 +744,18 @@ private void doWriteXRefInc(COSDocument doc) throws IOException
744744
trailer.removeItem(COSName.PREV);
745745
}
746746
pdfxRefStream.addTrailerInfo(trailer);
747-
// the size is the highest object number+1. we add one more
748-
// for the xref stream object we are going to write
749-
pdfxRefStream.setSize(number + 2);
750-
751-
setStartxref(getStandardOutput().getPos());
752-
COSStream stream2 = pdfxRefStream.getStream();
753-
doWriteObject(stream2);
747+
// Pre-assign the object key for the xref stream so it can be
748+
// included in its own cross-reference data. Per PDF Reference
749+
// §7.5.8, the /Size value must be one greater than the highest
750+
// object number in the file, including the xref stream itself.
751+
COSObjectKey xrefStreamKey = new COSObjectKey(++number, 0);
752+
long xrefStreamOffset = getStandardOutput().getPos();
753+
setStartxref(xrefStreamOffset);
754+
pdfxRefStream.addEntry(new NormalXReference(xrefStreamOffset, xrefStreamKey, null));
755+
pdfxRefStream.setSize(number + 1);
756+
757+
COSStream xrefStream = pdfxRefStream.getStream();
758+
doWriteObject(xrefStreamKey, xrefStream);
754759
}
755760
}
756761

0 commit comments

Comments
 (0)