Class PdfDocument

  • All Implemented Interfaces:
    java.io.Closeable, java.lang.AutoCloseable
    Direct Known Subclasses:
    PdfADocument, PdfSigner.PdfSignerDocument, PdfUADocument

    public class PdfDocument
    extends java.lang.Object
    implements java.io.Closeable
    Main enter point to work with PDF document.
    • Field Detail

      • PDF_NAMES_TO_REMOVE_FROM_ORIGINAL_TRAILER

        private static final PdfName[] PDF_NAMES_TO_REMOVE_FROM_ORIGINAL_TRAILER
      • LOGGER

        private static final org.slf4j.Logger LOGGER
      • xref

        final PdfXrefTable xref
        List of indirect objects used in the document.
      • documentHandlers

        private final java.util.Set<IEventHandler> documentHandlers
      • pendingDestinationMutations

        private final java.util.List<PdfDocument.DestinationMutationInfo> pendingDestinationMutations
        To be adjusted destinations. Key - originating page on the source document Value - a hashmap of Parent pdf objects and destinations to be updated
      • writer

        protected PdfWriter writer
        PdfWriter associated with the document. Not null if document opened either in writing or stamping mode.
      • reader

        protected PdfReader reader
        PdfReader associated with the document. Not null if document is opened either in reading or stamping mode.
      • catalog

        protected PdfCatalog catalog
        Document catalog.
      • pdfVersion

        protected PdfVersion pdfVersion
        Document version.
      • structParentIndex

        protected int structParentIndex
      • closeReader

        protected boolean closeReader
      • closeWriter

        protected boolean closeWriter
      • isClosing

        protected boolean isClosing
      • closed

        protected boolean closed
      • flushUnusedObjects

        protected boolean flushUnusedObjects
        flag determines whether to write unused objects to result document
      • serializedObjectsCache

        java.util.Map<PdfIndirectReference,​byte[]> serializedObjectsCache
        Cache of already serialized objects from this document for smart mode.
      • memoryLimitsAwareHandler

        MemoryLimitsAwareHandler memoryLimitsAwareHandler
        Handler which will be used for decompression of pdf streams.
      • defaultPageSize

        private PageSize defaultPageSize
        Default page size. New page by default will be created with this size.
      • originalDocumentId

        private PdfString originalDocumentId
        The original (first) id when the document is read initially.
      • modifiedDocumentId

        private PdfString modifiedDocumentId
        The original modified (second) id when the document is read initially.
      • xmpMetadataBytes

        private byte[] xmpMetadataBytes
        XMP Metadata bytes for the document.
      • xmpMetadata

        private XMPMeta xmpMetadata
        XMP Metadata which is used to prevent bytes deserialization for a few times on the same bytes.
    • Constructor Detail

      • PdfDocument

        public PdfDocument​(PdfReader reader)
        Open PDF document in reading mode.
        Parameters:
        reader - PDF reader.
      • PdfDocument

        public PdfDocument​(PdfReader reader,
                           DocumentProperties properties)
        Open PDF document in reading mode.
        Parameters:
        reader - PDF reader.
        properties - document properties
      • PdfDocument

        public PdfDocument​(PdfWriter writer)
        Open PDF document in writing mode. Document has no pages when initialized.
        Parameters:
        writer - PDF writer
      • PdfDocument

        public PdfDocument​(PdfWriter writer,
                           DocumentProperties properties)
        Open PDF document in writing mode. Document has no pages when initialized.
        Parameters:
        writer - PDF writer
        properties - document properties
      • PdfDocument

        public PdfDocument​(PdfReader reader,
                           PdfWriter writer)
        Opens PDF document in the stamping mode.
        Parameters:
        reader - PDF reader.
        writer - PDF writer.
      • PdfDocument

        public PdfDocument​(PdfReader reader,
                           PdfWriter writer,
                           StampingProperties properties)
        Open PDF document in stamping mode.
        Parameters:
        reader - PDF reader.
        writer - PDF writer.
        properties - properties of the stamping process
    • Method Detail

      • isClosing

        public boolean isClosing()
        Checks if the document closing has been started or not.
        Returns:
        true if closing process has been started, otherwise false
      • setXmpMetadata

        public void setXmpMetadata​(XMPMeta xmpMeta,
                                   SerializeOptions serializeOptions)
                            throws XMPException
        Sets the XMP Metadata.

        The XMP Metadata values are synchronized with information dictionary.

        Parameters:
        xmpMeta - the xmpMetadata to set
        serializeOptions - serialization options
        Throws:
        XMPException - on serialization errors
      • setXmpMetadata

        protected void setXmpMetadata​(byte[] xmpMetadata)
        Sets the XMP Metadata.

        The XMP Metadata values are synchronized with information dictionary.

        Parameters:
        xmpMetadata - the xmpMetadata bytes to set
      • getXmpMetadata

        public XMPMeta getXmpMetadata()
                               throws XMPException
        Gets XMP Metadata.

        XMP Metadata is lazy initialized. It will be initialized during the first call of this method.

        To update XMP Metadata of the document, use setXmpMetadata(XMPMeta) method.

        Returns:
        existed XMP Metadata
        Throws:
        XMPException - on serialization errors
      • getXmpMetadata

        public XMPMeta getXmpMetadata​(boolean createNew)
                               throws XMPException
        Gets XMP Metadata or create a new one.

        XMP Metadata is lazy initialized. It will be initialized during the first call of this method.

        To update XMP Metadata of the document, use setXmpMetadata(XMPMeta) method.

        Parameters:
        createNew - if true, create a new empty XMP Metadata if it did not present
        Returns:
        existed or newly created XMP Metadata
        Throws:
        XMPException - on serialization errors
      • getXmpMetadataBytes

        public byte[] getXmpMetadataBytes()
        Gets XMP Metadata.

        XMP Metadata is lazy initialized. It will be initialized during the first call of this method.

        To update XMP Metadata of the document, use setXmpMetadata(XMPMeta) method.

        Returns:
        existed XMP Metadata bytes
      • getXmpMetadataBytes

        public byte[] getXmpMetadataBytes​(boolean createNew)
        Gets XMP Metadata or create a new one.

        XMP Metadata is lazy initialized. It will be initialized during the first call of this method.

        To update XMP Metadata of the document, use setXmpMetadata(XMPMeta) method.

        Parameters:
        createNew - if true, create a new empty XMP Metadata if it did not present
        Returns:
        existed or newly created XMP Metadata byte array
      • getPdfObject

        public PdfObject getPdfObject​(int objNum)
        Gets PdfObject by object number.
        Parameters:
        objNum - object number.
        Returns:
        PdfObject or null, if object not found.
      • getNumberOfPdfObjects

        public int getNumberOfPdfObjects()
        Get number of indirect objects in the document.
        Returns:
        number of indirect objects.
      • getPage

        public PdfPage getPage​(int pageNum)
        Gets the page by page number.
        Parameters:
        pageNum - page number.
        Returns:
        page by page number.
        Throws:
        PdfException - in case the page tree is broken
      • getFirstPage

        public PdfPage getFirstPage()
        Get the first page of the document.
        Returns:
        first page of the document.
      • getLastPage

        public PdfPage getLastPage()
        Gets the last page of the document.
        Returns:
        last page.
      • getMemoryLimitsAwareHandler

        public MemoryLimitsAwareHandler getMemoryLimitsAwareHandler()
        Gets current memory limits handler
        Returns:
        MemoryLimitsAwareHandler instance
      • addNewPage

        public PdfPage addNewPage()
        Creates and adds new page to the end of document.
        Returns:
        added page
      • addNewPage

        public PdfPage addNewPage​(PageSize pageSize)
        Creates and adds new page with the specified page size.
        Parameters:
        pageSize - page size of the new page
        Returns:
        added page
      • addNewPage

        public PdfPage addNewPage​(int index)
        Creates and inserts new page to the document.
        Parameters:
        index - position to addPage page to
        Returns:
        inserted page
        Throws:
        PdfException - in case page is flushed
      • addNewPage

        public PdfPage addNewPage​(int index,
                                  PageSize pageSize)
        Creates and inserts new page to the document.
        Parameters:
        index - position to addPage page to
        pageSize - page size of the new page
        Returns:
        inserted page
        Throws:
        PdfException - in case page is flushed
      • addPage

        public PdfPage addPage​(PdfPage page)
        Adds page to the end of document.
        Parameters:
        page - page to add.
        Returns:
        added page.
        Throws:
        PdfException - in case page is flushed
      • addPage

        public PdfPage addPage​(int index,
                               PdfPage page)
        Inserts page to the document.
        Parameters:
        index - position to addPage page to
        page - page to addPage
        Returns:
        inserted page
        Throws:
        PdfException - in case page is flushed
      • getNumberOfPages

        public int getNumberOfPages()
        Gets number of pages of the document.
        Returns:
        number of pages.
      • getPageNumber

        public int getPageNumber​(PdfPage page)
        Gets page number by page.
        Parameters:
        page - the page.
        Returns:
        page number.
      • movePage

        public boolean movePage​(PdfPage page,
                                int insertBefore)
        Moves page to new place in same document with all it tag structure
        Parameters:
        page - page to be moved in document if present
        insertBefore - indicates before which page new one will be inserted to
        Returns:
        true if this document contained the specified page
      • movePage

        public void movePage​(int pageNumber,
                             int insertBefore)
        Moves page to new place in same document with all it tag structure
        Parameters:
        pageNumber - number of Page that will be moved
        insertBefore - indicates before which page new one will be inserted to
      • removePage

        public boolean removePage​(PdfPage page)
        Removes the first occurrence of the specified page from this document, if it is present. Returns true if this document contained the specified element (or equivalently, if this document changed as a result of the call).
        Parameters:
        page - page to be removed from this document, if present
        Returns:
        true if this document contained the specified page
      • removePage

        public void removePage​(int pageNum)
        Removes page from the document by page number.
        Parameters:
        pageNum - the one-based index of the PdfPage to be removed
      • getDiContainer

        public DIContainer getDiContainer()
        Gets the container containing all available dependencies.
        Returns:
        the container containing all available dependencies.
      • getDocumentInfo

        public PdfDocumentInfo getDocumentInfo()
        Gets document information dictionary.

        info is lazy initialized. It will be initialized during the first call of this method.

        The information dictionary values are synchronized with document XMP Metadata.

        Returns:
        document information dictionary.
      • getDefaultPageSize

        public PageSize getDefaultPageSize()
        Gets default page size. New pages by default are created with this size.
        Returns:
        default page size
      • setDefaultPageSize

        public void setDefaultPageSize​(PageSize pageSize)
        Sets default page size. New pages by default will be created with this size.
        Parameters:
        pageSize - page size to be set as default
      • addEventHandler

        public void addEventHandler​(java.lang.String type,
                                    AbstractPdfDocumentEventHandler handler)
        Adds new event handler.
        Parameters:
        type - a type of event to be handled
        handler - event handler
      • removeAllHandlers

        public void removeAllHandlers()
        Removes all event handlers for this document.
      • getWriter

        public PdfWriter getWriter()
        Gets PdfWriter associated with the document.
        Returns:
        PdfWriter associated with the document.
      • getReader

        public PdfReader getReader()
        Gets PdfReader associated with the document.
        Returns:
        PdfReader associated with the document.
      • isAppendMode

        public boolean isAppendMode()
        Returns true if the document is opened in append mode, and false otherwise.
        Returns:
        true if the document is opened in append mode, and false otherwise.
      • createNextIndirectReference

        public PdfIndirectReference createNextIndirectReference()
        Creates next available indirect reference.
        Returns:
        created indirect reference.
      • getPdfVersion

        public PdfVersion getPdfVersion()
        Gets PDF version.
        Returns:
        PDF version.
      • getCatalog

        public PdfCatalog getCatalog()
        Gets PDF catalog.
        Returns:
        PDF catalog.
      • close

        public void close()
        Close PDF document.
        Specified by:
        close in interface java.lang.AutoCloseable
        Specified by:
        close in interface java.io.Closeable
      • isClosed

        public boolean isClosed()
        Gets close status of the document.
        Returns:
        true, if the document has already been closed, otherwise false.
      • isTagged

        public boolean isTagged()
        Gets tagged status of the document.
        Returns:
        true, if the document has tag structure, otherwise false.
      • setTagged

        public PdfDocument setTagged()
        Specifies that document shall contain tag structure. See ISO 32000-1, section 14.8 "Tagged PDF"
        Returns:
        this PdfDocument instance
      • getNextStructParentIndex

        public int getNextStructParentIndex()
        Gets next parent index of tagged document.
        Returns:
        -1 if document is not tagged, or >= 0 if tagged.
        See Also:
        isTagged(), getNextStructParentIndex()
      • getTagStructureContext

        public TagStructureContext getTagStructureContext()
        Gets document TagStructureContext. The document must be tagged, otherwise an exception will be thrown.
        Returns:
        document TagStructureContext.
      • copyPagesTo

        public java.util.List<PdfPage> copyPagesTo​(int pageFrom,
                                                   int pageTo,
                                                   PdfDocument toDocument,
                                                   int insertBeforePage)
        Copies a range of pages from current document to toDocument. Use this method if you want to copy pages across tagged documents. This will keep resultant PDF structure consistent.

        If outlines destination names are the same in different documents, all such outlines will lead to a single location in the resultant document. In this case iText will log a warning. This can be avoided by renaming destinations names in the source document.

        Parameters:
        pageFrom - start of the range of pages to be copied.
        pageTo - end of the range of pages to be copied.
        toDocument - a document to copy pages to.
        insertBeforePage - a position where to insert copied pages.
        Returns:
        list of copied pages
      • copyPagesTo

        public java.util.List<PdfPage> copyPagesTo​(int pageFrom,
                                                   int pageTo,
                                                   PdfDocument toDocument,
                                                   int insertBeforePage,
                                                   IPdfPageExtraCopier copier)
        Copies a range of pages from current document to toDocument. This range is inclusive, both page and pageTo are included in list of copied pages. Use this method if you want to copy pages across tagged documents. This will keep resultant PDF structure consistent.

        If outlines destination names are the same in different documents, all such outlines will lead to a single location in the resultant document. In this case iText will log a warning. This can be avoided by renaming destinations names in the source document.

        Parameters:
        pageFrom - 1-based start of the range of pages to be copied.
        pageTo - 1-based end (inclusive) of the range of pages to be copied. This page is included in list of copied pages.
        toDocument - a document to copy pages to.
        insertBeforePage - a position where to insert copied pages.
        copier - a copier which bears a special copy logic. May be null. It is recommended to use the same instance of IPdfPageExtraCopier for the same output document.
        Returns:
        list of new copied pages
      • copyPagesTo

        public java.util.List<PdfPage> copyPagesTo​(int pageFrom,
                                                   int pageTo,
                                                   PdfDocument toDocument)
        Copies a range of pages from current document to toDocument appending copied pages to the end. This range is inclusive, both page and pageTo are included in list of copied pages. Use this method if you want to copy pages across tagged documents. This will keep resultant PDF structure consistent.

        If outlines destination names are the same in different documents, all such outlines will lead to a single location in the resultant document. In this case iText will log a warning. This can be avoided by renaming destinations names in the source document.

        Parameters:
        pageFrom - 1-based start of the range of pages to be copied.
        pageTo - 1-based end (inclusive) of the range of pages to be copied. This page is included in list of copied pages.
        toDocument - a document to copy pages to.
        Returns:
        list of new copied pages
      • copyPagesTo

        public java.util.List<PdfPage> copyPagesTo​(int pageFrom,
                                                   int pageTo,
                                                   PdfDocument toDocument,
                                                   IPdfPageExtraCopier copier)
        Copies a range of pages from current document to toDocument appending copied pages to the end. This range is inclusive, both page and pageTo are included in list of copied pages. Use this method if you want to copy pages across tagged documents. This will keep resultant PDF structure consistent.

        If outlines destination names are the same in different documents, all such outlines will lead to a single location in the resultant document. In this case iText will log a warning. This can be avoided by renaming destinations names in the source document.

        Parameters:
        pageFrom - 1-based start of the range of pages to be copied.
        pageTo - 1-based end (inclusive) of the range of pages to be copied. This page is included in list of copied pages.
        toDocument - a document to copy pages to.
        copier - a copier which bears a special copy logic. May be null. It is recommended to use the same instance of IPdfPageExtraCopier for the same output document.
        Returns:
        list of new copied pages.
      • copyPagesTo

        public java.util.List<PdfPage> copyPagesTo​(java.util.List<java.lang.Integer> pagesToCopy,
                                                   PdfDocument toDocument,
                                                   int insertBeforePage)
        Copies a range of pages from current document to toDocument. Use this method if you want to copy pages across tagged documents. This will keep resultant PDF structure consistent.

        If outlines destination names are the same in different documents, all such outlines will lead to a single location in the resultant document. In this case iText will log a warning. This can be avoided by renaming destinations names in the source document.

        Parameters:
        pagesToCopy - list of pages to be copied.
        toDocument - a document to copy pages to.
        insertBeforePage - a position where to insert copied pages.
        Returns:
        list of new copied pages
      • copyPagesTo

        public java.util.List<PdfPage> copyPagesTo​(java.util.List<java.lang.Integer> pagesToCopy,
                                                   PdfDocument toDocument,
                                                   int insertBeforePage,
                                                   IPdfPageExtraCopier copier)
        Copies a range of pages from current document to toDocument. Use this method if you want to copy pages across tagged documents. This will keep resultant PDF structure consistent.

        If outlines destination names are the same in different documents, all such outlines will lead to a single location in the resultant document. In this case iText will log a warning. This can be avoided by renaming destinations names in the source document.

        Parameters:
        pagesToCopy - list of pages to be copied.
        toDocument - a document to copy pages to.
        insertBeforePage - a position where to insert copied pages.
        copier - a copier which bears a special copy logic. May be null. It is recommended to use the same instance of IPdfPageExtraCopier for the same output document.
        Returns:
        list of new copied pages
      • copyPagesTo

        public java.util.List<PdfPage> copyPagesTo​(java.util.List<java.lang.Integer> pagesToCopy,
                                                   PdfDocument toDocument)
        Copies a range of pages from current document to toDocument appending copied pages to the end. Use this method if you want to copy pages across tagged documents. This will keep resultant PDF structure consistent.

        If outlines destination names are the same in different documents, all such outlines will lead to a single location in the resultant document. In this case iText will log a warning. This can be avoided by renaming destinations names in the source document.

        Parameters:
        pagesToCopy - list of pages to be copied.
        toDocument - a document to copy pages to.
        Returns:
        list of copied pages
      • copyPagesTo

        public java.util.List<PdfPage> copyPagesTo​(java.util.List<java.lang.Integer> pagesToCopy,
                                                   PdfDocument toDocument,
                                                   IPdfPageExtraCopier copier)
        Copies a range of pages from current document to toDocument appending copied pages to the end. Use this method if you want to copy pages across tagged documents. This will keep resultant PDF structure consistent.

        If outlines destination names are the same in different documents, all such outlines will lead to a single location in the resultant document. In this case iText will log a warning. This can be avoided by renaming destinations names in the source document.

        Parameters:
        pagesToCopy - list of pages to be copied.
        toDocument - a document to copy pages to.
        copier - a copier which bears a special copy logic. May be null. It is recommended to use the same instance of IPdfPageExtraCopier for the same output document.
        Returns:
        list of copied pages
      • flushCopiedObjects

        public void flushCopiedObjects​(PdfDocument sourceDoc)
        Flush all copied objects and remove them from copied cache.

        Note, if you will copy objects from the same document, duplicated objects will be created. That's why usually this method is meant to be used when all copying from source document is finished. For other cases one can also consider other flushing mechanisms, e.g. pages-based flushing.

        Parameters:
        sourceDoc - source document
      • isCloseReader

        public boolean isCloseReader()
        Checks, whether close() method will close associated PdfReader.
        Returns:
        true, close() method is going to close associated PdfReader, otherwise false.
      • setCloseReader

        public void setCloseReader​(boolean closeReader)
        Sets, whether close() method shall close associated PdfReader.
        Parameters:
        closeReader - true, close() method shall close associated PdfReader, otherwise false.
      • isCloseWriter

        public boolean isCloseWriter()
        Checks, whether close() method will close associated PdfWriter.
        Returns:
        true, close() method is going to close associated PdfWriter, otherwise false.
      • setCloseWriter

        public void setCloseWriter​(boolean closeWriter)
        Sets, whether close() method shall close associated PdfWriter.
        Parameters:
        closeWriter - true, close() method shall close associated PdfWriter, otherwise false.
      • isFlushUnusedObjects

        public boolean isFlushUnusedObjects()
        Checks, whether close() will flush unused objects, e.g. unreachable from PDF Catalog. By default - false.
        Returns:
        false, if close() shall not flush unused objects, otherwise true.
      • setFlushUnusedObjects

        public void setFlushUnusedObjects​(boolean flushUnusedObjects)
        Sets, whether close() shall flush unused objects, e.g. unreachable from PDF Catalog.
        Parameters:
        flushUnusedObjects - false, if close() shall not flush unused objects, otherwise true.
      • getOutlines

        public PdfOutline getOutlines​(boolean updateOutlines)
        This method returns a complete outline tree of the whole document.
        Parameters:
        updateOutlines - if the flag is true, the method reads the whole document and creates outline tree. If the flag is false, the method gets cached outline tree (if it was cached via calling getOutlines method before).
        Returns:
        fully initialize PdfOutline object.
      • initializeOutlines

        public void initializeOutlines()
        This method initializes an outline tree of the document and sets outline mode to true.
      • addNamedDestination

        public void addNamedDestination​(java.lang.String key,
                                        PdfObject value)
        This methods adds new name in the Dests NameTree. It throws an exception, if the name already exists.
        Parameters:
        key - Name of the destination.
        value - An object destination refers to. Must be an array or a dictionary with key /D and array. See ISO 32000-1 12.3.2.3 for more info.
      • addNamedDestination

        public void addNamedDestination​(PdfString key,
                                        PdfObject value)
        This methods adds new name in the Dests NameTree. It throws an exception, if the name already exists.
        Parameters:
        key - Name of the destination.
        value - An object destination refers to. Must be an array or a dictionary with key /D and array. See ISO 32000-1 12.3.2.3 for more info.
      • listIndirectReferences

        public java.util.List<PdfIndirectReference> listIndirectReferences()
        Gets static copy of cross reference table.
        Returns:
        a static copy of cross reference table
      • getTrailer

        public PdfDictionary getTrailer()
        Gets document trailer.
        Returns:
        document trailer.
      • checkIsoConformance

        public void checkIsoConformance​(IValidationContext validationContext)
      • addFileAttachment

        public void addFileAttachment​(java.lang.String key,
                                      PdfFileSpec fs)
        Adds file attachment at document level.
        Parameters:
        key - name of the destination.
        fs - PdfFileSpec object.
      • addAssociatedFile

        public void addAssociatedFile​(java.lang.String description,
                                      PdfFileSpec fs)
        Adds file associated with PDF document as a whole and identifies the relationship between them.

        Associated files may be used in Pdf/A-3 and Pdf 2.0 documents. The method is very similar to addFileAttachment(String, PdfFileSpec). However, besides adding file description to Names tree, it adds file to array value of the AF key in the document catalog.

        For associated files their associated file specification dictionaries shall include the AFRelationship key

        Parameters:
        description - the file description
        fs - file specification dictionary of associated file
        See Also:
        addFileAttachment(String, PdfFileSpec)
      • getAssociatedFiles

        public PdfArray getAssociatedFiles()
        Returns files associated with PDF document.
        Returns:
        associated files array.
      • getEncryptedPayloadDocument

        public PdfEncryptedPayloadDocument getEncryptedPayloadDocument()
        Gets the encrypted payload of this document, or returns null if this document isn't an unencrypted wrapper document.
        Returns:
        encrypted payload of this document.
      • setEncryptedPayload

        public void setEncryptedPayload​(PdfFileSpec fs)
        Sets an encrypted payload, making this document an unencrypted wrapper document. The file spec shall include the AFRelationship key with a value of EncryptedPayload, and shall include an encrypted payload dictionary.
        Parameters:
        fs - encrypted payload file spec. PdfEncryptedPayloadFileSpecFactory can produce one.
      • getPageLabels

        public java.lang.String[] getPageLabels()
        This method retrieves the page labels from a document as an array of String objects.
        Returns:
        String list of page labels if they were found, or null otherwise
      • hasOutlines

        public boolean hasOutlines()
        Indicates if the document has any outlines
        Returns:
        true, if there are outlines and false otherwise.
      • setUserProperties

        public void setUserProperties​(boolean userProperties)
        Sets the flag indicating the presence of structure elements that contain user properties attributes.
        Parameters:
        userProperties - the user properties flag
      • getDefaultFont

        public PdfFont getDefaultFont()
        Gets default font for the document: Helvetica, WinAnsi. One instance per document.
        Returns:
        instance of PdfFont or null on error.
      • addFont

        public PdfFont addFont​(PdfFont font)
        Adds a PdfFont instance to this document so that this font is flushed automatically on document close. As a side effect, the underlying font dictionary is made indirect if it wasn't the case yet
        Parameters:
        font - a PdfFont instance to add
        Returns:
        the same PdfFont instance.
      • registerProduct

        public boolean registerProduct​(ProductData productData)
        Registers a product for debugging purposes.
        Parameters:
        productData - product to be registered.
        Returns:
        true if the product hadn't been registered before.
      • getFingerPrint

        public FingerPrint getFingerPrint()
        Returns the object containing the registered products.
        Returns:
        fingerprint object
      • findFont

        public PdfFont findFont​(java.lang.String fontProgram,
                                java.lang.String encoding)
        Find PdfFont from loaded fonts with corresponding fontProgram and encoding or CMAP.
        Parameters:
        fontProgram - a font name or path to a font program
        encoding - an encoding or CMAP
        Returns:
        the font instance, or null if font wasn't found
      • getDocumentId

        public long getDocumentId()
        Obtains numeric document id.
        Returns:
        document id
      • getDocumentIdWrapper

        public SequenceId getDocumentIdWrapper()
        Obtains document id as a SequenceId.
        Returns:
        document id
      • getSerializeOptions

        public SerializeOptions getSerializeOptions()
        Gets a persistent XMP metadata serialization options.
        Returns:
        serialize options
      • setSerializeOptions

        public void setSerializeOptions​(SerializeOptions serializeOptions)
        Sets a persistent XMP metadata serialization options.
        Parameters:
        serializeOptions - serialize options
      • initTagStructureContext

        protected void initTagStructureContext()
      • storeDestinationToReaddress

        protected void storeDestinationToReaddress​(PdfDestination destination,
                                                   java.util.function.Consumer<PdfDestination> onPageAvailable,
                                                   java.util.function.Consumer<PdfDestination> onPageNotAvailable)
        Save destinations in a temporary storage for further copying.
        Parameters:
        destination - the PdfDestination to be updated itself.
        onPageAvailable - a destination consumer that will handle the copying when the destination still resolves, it gets the new destination as input
        onPageNotAvailable - a destination consumer that will handle the copying when the destination is not available, it gets the original destination as input
      • flushObject

        protected void flushObject​(PdfObject pdfObject,
                                   boolean canBeInObjStm)
                            throws java.io.IOException
        Flush an object.
        Parameters:
        pdfObject - object to flush.
        canBeInObjStm - indicates whether object can be placed into object stream.
        Throws:
        java.io.IOException - on error.
      • open

        protected void open​(PdfVersion newPdfVersion)
        Initializes document.
        Parameters:
        newPdfVersion - new pdf version of the resultant file if stamper is used and the version needs to be changed, or null otherwise
      • updateXmpMetadata

        protected void updateXmpMetadata()
        Updates XMP metadata. Shall be overridden.
      • updateDefaultXmpMetadata

        protected XMPMeta updateDefaultXmpMetadata()
                                            throws XMPException
        Update XMP metadata values from PdfDocumentInfo.
        Returns:
        the XMPMetadata
        Throws:
        XMPException - if the file is not well-formed XML or if parsing fails.
      • getDocumentFonts

        protected java.util.Collection<PdfFont> getDocumentFonts()
        List all newly added or loaded fonts
        Returns:
        List of PdfFont.
      • flushFonts

        protected void flushFonts()
        Flushes all newly added or loaded fonts.
      • checkAndAddPage

        protected void checkAndAddPage​(int index,
                                       PdfPage page)
        Checks page before adding and add.
        Parameters:
        index - one-base index of the page.
        page - PdfPage to add.
      • checkAndAddPage

        protected void checkAndAddPage​(PdfPage page)
        Checks page before adding.
        Parameters:
        page - PdfPage to add.
      • checkClosingStatus

        protected void checkClosingStatus()
        checks whether a method is invoked at the closed document
      • getPageFactory

        protected IPdfPageFactory getPageFactory()
        Returns the factory for creating page instances.
        Returns:
        implementation of IPdfPageFactory for current document
      • tryInitTagStructure

        protected void tryInitTagStructure​(PdfDictionary str)
        Initializes the new instance of document's structure tree root PdfStructTreeRoot. See ISO 32000-1, section 14.7.2 Structure Hierarchy.
        Parameters:
        str - dictionary to create structure tree root
      • getXref

        PdfXrefTable getXref()
        Gets list of indirect references.
        Returns:
        list of indirect references.
      • doesStreamBelongToEmbeddedFile

        boolean doesStreamBelongToEmbeddedFile​(PdfStream stream)
      • hasAcroForm

        boolean hasAcroForm()
      • enableByteArrayWritingMode

        private void enableByteArrayWritingMode()
      • tryFlushTagStructure

        private void tryFlushTagStructure​(boolean isAppendMode)
      • updateValueInMarkInfoDict

        private void updateValueInMarkInfoDict​(PdfName key,
                                               PdfObject value)
      • removeUnusedWidgetsFromFields

        private void removeUnusedWidgetsFromFields​(PdfPage page)
        Removes all widgets associated with a given page from AcroForm structure. Widgets can be either pure or merged.
        Parameters:
        page - to remove from.
      • resolveDestinations

        private void resolveDestinations​(PdfDocument toDocument,
                                         java.util.Map<PdfPage,​PdfPage> page2page)
      • copyOutlines

        private void copyOutlines​(java.util.Set<PdfOutline> outlines,
                                  PdfDocument toDocument,
                                  java.util.Map<PdfPage,​PdfPage> page2page)
        This method copies all given outlines
        Parameters:
        outlines - outlines to be copied
        toDocument - document where outlines should be copied
      • getAllOutlinesToCopy

        private void getAllOutlinesToCopy​(PdfOutline outline,
                                          java.util.Set<PdfOutline> outlinesToCopy)
        This method gets all outlines to be copied including parent outlines
        Parameters:
        outline - current outline
        outlinesToCopy - a Set of outlines to be copied
      • cloneOutlines

        private void cloneOutlines​(java.util.Set<PdfOutline> outlinesToCopy,
                                   PdfOutline newParent,
                                   PdfOutline oldParent,
                                   java.util.Map<PdfPage,​PdfPage> page2page,
                                   PdfDocument toDocument)
        This method copies create new outlines in the Document to copy.
        Parameters:
        outlinesToCopy - - Set of outlines to be copied
        newParent - - new parent outline
        oldParent - - old parent outline
      • ensureTreeRootAddedToNames

        private void ensureTreeRootAddedToNames​(PdfObject treeRoot,
                                                PdfName treeType)
      • writerHasEncryption

        private boolean writerHasEncryption()
      • updatePdfVersionFromCatalog

        private void updatePdfVersionFromCatalog()
      • readDocumentIds

        private void readDocumentIds()
      • processReadingError

        private void processReadingError​(java.lang.String errorMessage)
      • overrideFullCompressionInWriterProperties

        private static void overrideFullCompressionInWriterProperties​(WriterProperties properties,
                                                                      boolean readerHasXrefStream)