Package org.apache.pdfbox.pdfparser
Class XrefTrailerResolver
java.lang.Object
org.apache.pdfbox.pdfparser.XrefTrailerResolver
This class will collect all XRef/trailer objects and creates correct
xref/trailer information after all objects are read using startxref
and 'Prev' information (unused XRef/trailer objects are discarded).
In case of missing startxref or wrong startxref pointer all
XRef/trailer objects are used to create xref table / trailer dictionary
in order they occur.
For each new xref object/XRef stream method
nextXrefObj(long)
must be called with start byte position. All following calls to
setXRef(COSObjectKey, long)
or setTrailer(COSDictionary)
will add the data for this byte position.
After all objects are parsed the startxref position must be provided
using setStartxref(long)
. This is used to build the chain of
active xref/trailer objects used for creating document trailer and xref table.- Author:
- Timo Boehme (timo.boehme at ontochem.com)
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoid
Release all used resources.getContainedObjectNumbers
(int objstmObjNr) Returns object numbers which are referenced as contained in object stream with specified object number.Returns the trailer last set bysetTrailer(COSDictionary)
.final COSDictionary
final COSDictionary
Gets the resolved trailer.Gets the resolved xref table.void
nextXrefObj
(long startBytePos) Signals that a new XRef object (table or stream) starts.void
setStartxref
(long startxrefBytePosValue) Sets the byte position of the first XRef (has to be called after very last startxref was read).void
setTrailer
(COSDictionary trailer) Adds trailer information for current XRef object.void
setXRef
(COSObjectKey objKey, long offset) Populate XRef HashMap of current XRef object.
-
Constructor Details
-
XrefTrailerResolver
public XrefTrailerResolver()
-
-
Method Details
-
getFirstTrailer
-
getLastTrailer
-
nextXrefObj
public void nextXrefObj(long startBytePos) Signals that a new XRef object (table or stream) starts.- Parameters:
startBytePos
- the offset to start at
-
setXRef
Populate XRef HashMap of current XRef object. Will add an Xreftable entry that maps ObjectKeys to byte offsets in the file.- Parameters:
objKey
- The objkey, with id and gen numbersoffset
- The byte offset in this file
-
setTrailer
Adds trailer information for current XRef object.- Parameters:
trailer
- the current document trailer dictionary
-
getCurrentTrailer
Returns the trailer last set bysetTrailer(COSDictionary)
.- Returns:
- the current trailer.
-
setStartxref
public void setStartxref(long startxrefBytePosValue) Sets the byte position of the first XRef (has to be called after very last startxref was read). This is used to resolve chain of active XRef/trailer. In case startxref position is not found we output a warning and use all XRef/trailer objects combined in byte position order. Thus for incomplete PDF documents with missing startxref one could call this method with parameter value -1.- Parameters:
startxrefBytePosValue
- starting position of the first XRef
-
getTrailer
Gets the resolved trailer. Might returnnull
in casesetStartxref(long)
was not called before.- Returns:
- the trailer if available
-
getXrefTable
Gets the resolved xref table. Might returnnull
in casesetStartxref(long)
was not called before.- Returns:
- the xrefTable if available
-
getContainedObjectNumbers
Returns object numbers which are referenced as contained in object stream with specified object number. This will scan resolved xref table for all entries having negated stream object number as value.- Parameters:
objstmObjNr
- object number of object stream for which contained object numbers should be returned- Returns:
- set of object numbers referenced for given object stream
or
null
ifsetStartxref(long)
was not called before so that no resolved xref table exists
-
clearResources
public void clearResources()Release all used resources.
-