org.apache.pdfbox.pdfparser
Class XrefTrailerResolver

java.lang.Object
  extended by org.apache.pdfbox.pdfparser.XrefTrailerResolver

public class XrefTrailerResolver
extends java.lang.Object

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(int) must be called with start byte position. All following calls to #setXRef(COSObjectKey, int) or setTrailer(COSDictionary) will add the data for this byte position. After all objects are parsed the startxref position must be provided using #setStartxref(int). This is used to build the chain of active xref/trailer objects used for creating document trailer and xref table.

Author:
Timo B??hme (timo.boehme at ontochem.com)

Constructor Summary
XrefTrailerResolver()
           
 
Method Summary
 java.util.Set<java.lang.Long> getContainedObjectNumbers(int objstmObjNr)
          Returns object numbers which are referenced as contained in object stream with specified object number.
 COSDictionary getCurrentTrailer()
          Returns the trailer last set by setTrailer(COSDictionary).
 COSDictionary getTrailer()
          Gets the resolved trailer.
 java.util.Map<COSObjectKey,java.lang.Long> getXrefTable()
          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.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

XrefTrailerResolver

public XrefTrailerResolver()
Method Detail

nextXrefObj

public void nextXrefObj(long startBytePos)
Signals that a new XRef object (table or stream) starts.

Parameters:
startBytePos - the offset to start at

setXRef

public void setXRef(COSObjectKey objKey,
                    long offset)
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 numbers
offset - The byte offset in this file

setTrailer

public void setTrailer(COSDictionary trailer)
Adds trailer information for current XRef object.

Parameters:
trailer - the current document trailer dictionary

getCurrentTrailer

public COSDictionary getCurrentTrailer()
Returns the trailer last set by setTrailer(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

public COSDictionary getTrailer()
Gets the resolved trailer. Might return null in case #setStartxref(int) was not called before.

Returns:
the trailer if available

getXrefTable

public java.util.Map<COSObjectKey,java.lang.Long> getXrefTable()
Gets the resolved xref table. Might return null in case #setStartxref(int) was not called before.

Returns:
the xrefTable if available

getContainedObjectNumbers

public java.util.Set<java.lang.Long> getContainedObjectNumbers(int objstmObjNr)
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 if setStartxref(long) was not called before so that no resolved xref table exists