Class PdfWriter

  • All Implemented Interfaces:
    java.io.Closeable, java.io.Flushable, java.lang.AutoCloseable
    Direct Known Subclasses:
    MemoryFirstPdfWriter

    public class PdfWriter
    extends PdfOutputStream
    • Field Detail

      • OBJ

        private static final byte[] OBJ
      • ENDOBJ

        private static final byte[] ENDOBJ
      • isUserWarnedAboutAcroFormCopying

        protected boolean isUserWarnedAboutAcroFormCopying
      • objectStream

        PdfObjectStream objectStream
        Currently active object stream. Objects are written to the object stream if fullCompression set to true.
      • copiedObjects

        private final java.util.Map<PdfIndirectReference,​PdfIndirectReference> copiedObjects
        Is used to avoid duplications on object copying. It stores hashes of the indirect reference from the source document and the corresponding indirect references of the copied objects from the new document.
      • smartModeSerializer

        private final SmartModePdfObjectsSerializer smartModeSerializer
        Is used in smart mode to serialize and store serialized objects content.
      • originalOutputStream

        private java.io.OutputStream originalOutputStream
    • Constructor Detail

      • PdfWriter

        public PdfWriter​(java.io.File file)
                  throws java.io.IOException
        Create a PdfWriter writing to the passed File and with default writer properties.
        Parameters:
        file - File to write to.
        Throws:
        java.io.FileNotFoundException - if the file exists but is a directory rather than a regular file, does not exist but cannot be created, or cannot be opened for any other reason
        java.io.IOException
      • PdfWriter

        public PdfWriter​(java.io.OutputStream os)
        Create a PdfWriter writing to the passed outputstream and with default writer properties.
        Parameters:
        os - Outputstream to write to.
      • PdfWriter

        public PdfWriter​(java.io.OutputStream os,
                         WriterProperties properties)
        Creates PdfWriter instance, which writes to the passed OutputStream, using provided WriterProperties.
        Parameters:
        os - OutputStream in which writing should happen
        properties - WriterProperties to be used during the writing
      • PdfWriter

        public PdfWriter​(java.lang.String filename)
                  throws java.io.IOException
        Create a PdfWriter writing to the passed filename and with default writer properties.
        Parameters:
        filename - filename of the resulting pdf.
        Throws:
        java.io.FileNotFoundException - if the file exists but is a directory rather than a regular file, does not exist but cannot be created, or cannot be opened for any other reason
        java.io.IOException
      • PdfWriter

        public PdfWriter​(java.lang.String filename,
                         WriterProperties properties)
                  throws java.io.IOException
        Create a PdfWriter writing to the passed filename and using the passed writer properties.
        Parameters:
        filename - filename of the resulting pdf.
        properties - writerproperties to use.
        Throws:
        java.io.FileNotFoundException - if the file exists but is a directory rather than a regular file, does not exist but cannot be created, or cannot be opened for any other reason
        java.io.IOException
    • Method Detail

      • isFullCompression

        public boolean isFullCompression()
        Indicates if to use full compression mode.
        Returns:
        true if to use full compression, false otherwise.
      • getCompressionLevel

        public int getCompressionLevel()
        Gets default compression level for @see PdfStream. For more details @see DeflaterOutputStream.
        Returns:
        compression level.
      • setCompressionLevel

        public PdfWriter setCompressionLevel​(int compressionLevel)
        Sets default compression level for @see PdfStream. For more details @see DeflaterOutputStream.
        Parameters:
        compressionLevel - compression level.
        Returns:
        this PdfWriter instance
      • getPdfVersion

        public PdfVersion getPdfVersion()
        Gets defined pdf version for the document.
        Returns:
        version for the document
      • setSmartMode

        public PdfWriter setSmartMode​(boolean smartMode)
        Sets the smart mode.
        In smart mode when resources (such as fonts, images,...) are encountered, a reference to these resources is saved in a cache, so that they can be reused. This requires more memory, but reduces the file size of the resulting PDF document.
        Parameters:
        smartMode - True for enabling smart mode.
        Returns:
        this PdfWriter instance
      • flushObject

        protected void flushObject​(PdfObject pdfObject,
                                   boolean canBeInObjStm)
        Flushes the object. Override this method if you want to define custom behaviour for object flushing.
        Parameters:
        pdfObject - object to flush.
        canBeInObjStm - indicates whether object can be placed into object stream.
      • copyObject

        protected PdfObject copyObject​(PdfObject obj,
                                       PdfDocument documentTo,
                                       boolean allowDuplicating)
        Copies a PdfObject either stand alone or as part of the PdfDocument passed as documentTo.
        Parameters:
        obj - object to copy
        documentTo - optional target document
        allowDuplicating - allow that some objects will become duplicated by this action
        Returns:
        the copies object
      • copyObject

        protected PdfObject copyObject​(PdfObject obj,
                                       PdfDocument documentTo,
                                       boolean allowDuplicating,
                                       ICopyFilter copyFilter)
        Copies a PdfObject either stand alone or as part of the PdfDocument passed as documentTo.
        Parameters:
        obj - object to copy
        documentTo - optional target document
        allowDuplicating - allow that some objects will become duplicated by this action
        copyFilter - ICopyFilter a filter to apply while copying arrays and dictionaries * Use NullCopyFilter for no filtering
        Returns:
        the copies object
      • writeToBody

        protected void writeToBody​(PdfObject pdfObj)
        Writes object to body of PDF document.
        Parameters:
        pdfObj - object to write.
      • writeHeader

        protected void writeHeader()
        Writes PDF header.
      • flushWaitingObjects

        protected void flushWaitingObjects​(java.util.Set<PdfIndirectReference> forbiddenToFlush)
        Flushes all objects which have not been flushed yet.
        Parameters:
        forbiddenToFlush - a Set of references that are forbidden to be flushed automatically.
      • flushModifiedWaitingObjects

        protected void flushModifiedWaitingObjects​(java.util.Set<PdfIndirectReference> forbiddenToFlush)
        Flushes all modified objects which have not been flushed yet. Used in case incremental updates.
        Parameters:
        forbiddenToFlush - a Set of references that are forbidden to be flushed automatically.
      • finish

        void finish()
             throws java.io.IOException
        Throws:
        java.io.IOException
      • getObjectStream

        PdfObjectStream getObjectStream()
        Gets the current object stream.
        Returns:
        object stream.
      • flushCopiedObjects

        void flushCopiedObjects​(long docId)
        Flush all copied objects.
        Parameters:
        docId - id of the source document
      • enableByteArrayWritingMode

        void enableByteArrayWritingMode()
      • completeByteArrayWritingMode

        private void completeByteArrayWritingMode()
                                           throws java.io.IOException
        Throws:
        java.io.IOException
      • isByteArrayWritingMode

        private boolean isByteArrayWritingMode()
      • markArrayContentToFlush

        private void markArrayContentToFlush​(PdfArray array)
      • markDictionaryContentToFlush

        private void markDictionaryContentToFlush​(PdfDictionary dictionary)
      • markObjectToFlush

        private void markObjectToFlush​(PdfObject pdfObject)
      • checkTypeOfPdfDictionary

        private static boolean checkTypeOfPdfDictionary​(PdfObject dictionary,
                                                        PdfName expectedType)