Example usage for org.apache.pdfbox.pdfparser PDFXRefStream addTrailerInfo

List of usage examples for org.apache.pdfbox.pdfparser PDFXRefStream addTrailerInfo

Introduction

In this page you can find the example usage for org.apache.pdfbox.pdfparser PDFXRefStream addTrailerInfo.

Prototype

public void addTrailerInfo(COSDictionary trailerDict) 

Source Link

Document

Copy all Trailer Information to this file.

Usage

From source file:com.aaasec.sigserv.csspsupport.pdfbox.modifications.CsCOSWriter.java

License:Apache License

private void doWriteXRefInc(COSDocument doc, long hybridPrev) throws IOException, COSVisitorException {
    if (doc.isXRefStream() || hybridPrev != -1) {
        // the file uses XrefStreams, so we need to update
        // it with an xref stream. We create a new one and fill it
        // with data available here
        // first set an entry for the null entry in the xref table
        // this is probably not necessary
        // addXRefEntry(COSWriterXRefEntry.getNullEntry());

        // create a new XRefStrema object
        PDFXRefStream pdfxRefStream = new PDFXRefStream();

        // add all entries from the incremental update.
        List<COSWriterXRefEntry> xRefEntries2 = getXRefEntries();
        for (COSWriterXRefEntry cosWriterXRefEntry : xRefEntries2) {
            pdfxRefStream.addEntry(cosWriterXRefEntry);
        }//from   w  w  w  . j  a va  2  s .co  m

        COSDictionary trailer = doc.getTrailer();
        //            trailer.setLong(COSName.PREV, hybridPrev == -1 ? prev : hybridPrev);
        trailer.setLong(COSName.PREV, doc.getStartXref());

        pdfxRefStream.addTrailerInfo(trailer);
        // the size is the highest object number+1. we add one more
        // for the xref stream object we are going to write
        pdfxRefStream.setSize(getNumber() + 2);

        setStartxref(getStandardOutput().getPos());
        COSStream stream2 = pdfxRefStream.getStream();
        doWriteObject(stream2);
    }

    if (!doc.isXRefStream() || hybridPrev != -1) {
        COSDictionary trailer = doc.getTrailer();
        trailer.setLong(COSName.PREV, doc.getStartXref());
        if (hybridPrev != -1) {
            COSName xrefStm = COSName.XREF_STM;
            trailer.removeItem(xrefStm);
            trailer.setLong(xrefStm, getStartxref());
        }
        addXRefEntry(COSWriterXRefEntry.getNullEntry());

        // sort xref, needed only if object keys not regenerated
        Collections.sort(getXRefEntries());

        // remember the position where x ref was written
        setStartxref(getStandardOutput().getPos());

        getStandardOutput().write(XREF);
        getStandardOutput().writeEOL();
        // write start object number and object count for this x ref section
        // we assume starting from scratch

        Integer[] xRefRanges = getXRefRanges(getXRefEntries());
        int xRefLength = xRefRanges.length;
        int x = 0;
        int j = 0;
        while (x < xRefLength && (xRefLength % 2) == 0) {
            writeXrefRange(xRefRanges[x], xRefRanges[x + 1]);

            for (int i = 0; i < xRefRanges[x + 1]; ++i) {
                writeXrefEntry(xRefEntries.get(j++));
            }
            x += 2;
        }
    }
}