File tree Expand file tree Collapse file tree
pdfbox/src/main/java/org/apache/pdfbox/pdfwriter Expand file tree Collapse file tree Original file line number Diff line number Diff 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
You can’t perform that action at this time.
0 commit comments