Class COSWriter

  • All Implemented Interfaces:
    java.io.Closeable, java.lang.AutoCloseable, ICOSVisitor

    public class COSWriter
    extends java.lang.Object
    implements ICOSVisitor, java.io.Closeable
    this class acts on a in-memory representation of a pdf document. todo no support for incremental updates todo single xref section only todo no linearization
    Author:
    Michael Traut, Ben Litchfield
    • Field Detail

      • DICT_OPEN

        public static final byte[] DICT_OPEN
        The dictionary open token.
      • DICT_CLOSE

        public static final byte[] DICT_CLOSE
        The dictionary close token.
      • SPACE

        public static final byte[] SPACE
        space character.
      • COMMENT

        public static final byte[] COMMENT
        The start to a PDF comment.
      • VERSION

        public static final byte[] VERSION
        The output version of the PDF.
      • GARBAGE

        public static final byte[] GARBAGE
        Garbage bytes used to create the PDF header.
      • EOF

        public static final byte[] EOF
        The EOF constant.
      • REFERENCE

        public static final byte[] REFERENCE
        The reference token.
      • XREF

        public static final byte[] XREF
        The XREF token.
      • XREF_FREE

        public static final byte[] XREF_FREE
        The xref free token.
      • XREF_USED

        public static final byte[] XREF_USED
        The xref used token.
      • TRAILER

        public static final byte[] TRAILER
        The trailer token.
      • STARTXREF

        public static final byte[] STARTXREF
        The start xref token.
      • OBJ

        public static final byte[] OBJ
        The starting object token.
      • ENDOBJ

        public static final byte[] ENDOBJ
        The end object token.
      • ARRAY_OPEN

        public static final byte[] ARRAY_OPEN
        The array open token.
      • ARRAY_CLOSE

        public static final byte[] ARRAY_CLOSE
        The array close token.
      • STREAM

        public static final byte[] STREAM
        The open stream token.
      • ENDSTREAM

        public static final byte[] ENDSTREAM
        The close stream token.
    • Constructor Detail

      • COSWriter

        public COSWriter​(java.io.OutputStream os)
        COSWriter constructor comment.
        Parameters:
        os - The wrapped output stream.
      • COSWriter

        public COSWriter​(java.io.OutputStream os,
                         java.io.InputStream is)
        COSWriter constructor for incremental updates.
        Parameters:
        os - The wrapped output stream.
        is - input stream
    • Method Detail

      • addXRefEntry

        protected void addXRefEntry​(COSWriterXRefEntry entry)
        add an entry in the x ref table for later dump.
        Parameters:
        entry - The new entry to add.
      • close

        public void close()
                   throws java.io.IOException
        This will close the stream.
        Specified by:
        close in interface java.lang.AutoCloseable
        Specified by:
        close in interface java.io.Closeable
        Throws:
        java.io.IOException - If the underlying stream throws an exception.
      • getNumber

        protected long getNumber()
        This will get the current object number.
        Returns:
        The current object number.
      • getObjectKeys

        public java.util.Map<COSBase,​COSObjectKey> getObjectKeys()
        This will get all available object keys.
        Returns:
        A map of all object keys.
      • getOutput

        protected java.io.OutputStream getOutput()
        This will get the output stream.
        Returns:
        The output stream.
      • getStandardOutput

        protected COSStandardOutputStream getStandardOutput()
        This will get the standard output stream.
        Returns:
        The standard output stream.
      • getStartxref

        protected long getStartxref()
        This will get the current start xref.
        Returns:
        The current start xref.
      • getXRefEntries

        protected java.util.List<COSWriterXRefEntry> getXRefEntries()
        This will get the xref entries.
        Returns:
        All available xref entries.
      • setNumber

        protected void setNumber​(long newNumber)
        This will set the current object number.
        Parameters:
        newNumber - The new object number.
      • setStartxref

        protected void setStartxref​(long newStartxref)
        This will set the start xref.
        Parameters:
        newStartxref - The new start xref attribute.
      • doWriteBody

        protected void doWriteBody​(COSDocument doc)
                            throws java.io.IOException,
                                   COSVisitorException
        This will write the body of the document.
        Parameters:
        doc - The document to write the body for.
        Throws:
        java.io.IOException - If there is an error writing the data.
        COSVisitorException - If there is an error generating the data.
      • doWriteObject

        public void doWriteObject​(COSBase obj)
                           throws COSVisitorException
        This will write a COS object.
        Parameters:
        obj - The object to write.
        Throws:
        COSVisitorException - If there is an error visiting objects.
      • doWriteHeader

        protected void doWriteHeader​(COSDocument doc)
                              throws java.io.IOException
        This will write the header to the PDF document.
        Parameters:
        doc - The document to get the data from.
        Throws:
        java.io.IOException - If there is an error writing to the stream.
      • doWriteTrailer

        protected void doWriteTrailer​(COSDocument doc)
                               throws java.io.IOException,
                                      COSVisitorException
        This will write the trailer to the PDF document.
        Parameters:
        doc - The document to create the trailer for.
        Throws:
        java.io.IOException - If there is an IOError while writing the document.
        COSVisitorException - If there is an error while generating the data.
      • doWriteXRef

        protected void doWriteXRef​(COSDocument doc)
                            throws java.io.IOException
        write the x ref section for the pdf file currently, the pdf is reconstructed from the scratch, so we write a single section todo support for incremental writing?
        Parameters:
        doc - The document to write the xref from.
        Throws:
        java.io.IOException - If there is an error writing the data to the stream.
      • getXRefRanges

        protected java.lang.Integer[] getXRefRanges​(java.util.List<COSWriterXRefEntry> xRefEntriesList)
        check the xref entries and write out the ranges. The format of the returned array is exactly the same as the pdf specification. See section 7.5.4 of ISO32000-1:2008, example 1 (page 40) for reference.

        example: 0 1 2 5 6 7 8 10

        will create a array with follow ranges

        0 3 5 4 10 1

        this mean that the element 0 is followed by two other related numbers that represent a cluster of the size 3. 5 is follow by three other related numbers and create a cluster of size 4. etc.

        Parameters:
        xRefEntriesList - list with the xRef entries that was written
        Returns:
        a integer array with the ranges
      • writeReference

        public void writeReference​(COSBase obj)
                            throws COSVisitorException
        visitFromObjRef method comment.
        Parameters:
        obj - The object that is being visited.
        Throws:
        COSVisitorException - If there is an exception while visiting this object.
      • write

        public void write​(PDDocument doc)
                   throws COSVisitorException
        This will write the pdf document.
        Parameters:
        doc - The document to write.
        Throws:
        COSVisitorException - If an error occurs while generating the data.
        java.lang.IllegalStateException - If the document has an encryption dictionary but no protection policy.