Interface PdfDocument

    • Constructor Detail

    • Method Detail

      • getUid

        @NonNull() abstract String getUid()

        This is the unique identifier for this document. It will be created automatically based on the content sources.

        Returns:

        Unique document identifier.

      • isWritableAndCanSave

         abstract boolean isWritableAndCanSave()

        Query whether the document data source is read/write (is not compounded and comes from a supported source) and whether saving is enabled.

        Returns:

        true if the document supports editing and can be saved, false otherwise.

      • getPageCount

         abstract int getPageCount()

        Returns number of pages in this document.

        Returns:

        Number of pages in the PDF document.

      • getDocumentId

         abstract Array<byte> getDocumentId()

        Returns a document identifier. (inferred from document provider if possible) A permanent identifier. According to the PDF spec, this is based on the contents of the file at the time it was originally created, but in practice we might as well assume it to be random data. The value depends on the first document provider and may change after change to the document providers array.

        Returns:

        byte[] The document identifier.

      • getPageIndexForPageLabel

        @Nullable() abstract Integer getPageIndexForPageLabel(@NonNull() String pageLabel, boolean partialMatching)

        Gets the page index for the given page label.

        Parameters:
        pageLabel - The page label to search for.
        partialMatching - If false, the exact string will be searched for.
        Returns:

        The index of the page with the page label or null.

      • getPageLabel

         abstract String getPageLabel(@IntRange(from = 0) int pageIndex, boolean substituteWithPlainLabel)

        Gets the page label.

        Parameters:
        pageIndex - The index of the page.
        substituteWithPlainLabel - If true, and no page label exists for the given page, returns a string with the page number.
        Returns:

        The page label of the page requests or null if not found.

      • getPdfMetadata

        @NonNull() abstract DocumentPdfMetadata getPdfMetadata()

        Returns metadata (title, author, creation date, ...) of this document, stored in the PDF document dictionary.

        Returns:

        PDF document metadata.

      • getXmpMetadata

        @NonNull() abstract DocumentXmpMetadata getXmpMetadata()

        Returns document metadata stored in the XMP metadata entries included in the PDF file.

        Returns:

        PDF document metadata stored in the XMP metadata entries.

      • hasPermission

         abstract boolean hasPermission(@NonNull() DocumentPermissions permission)

        Test document permission flags.

        Returns:

        true if permission flag is set on this document, false otherwise.

      • getPageText

        @NonNull() abstract String getPageText(@IntRange(from = 0) int pageIndex)

        Returns text content of the document page.

        Parameters:
        pageIndex - 0-indexed page number.
        Returns:

        Text on the page. Text lines end with CRLF (`\r\n`).

      • getPageText

        @NonNull() abstract String getPageText(@IntRange(from = 0) int pageIndex, int start, int length)

        Returns text content between two character indexes. Use getPageTextLength to determine the number of characters on page.

        Parameters:
        pageIndex - 0-indexed page number.
        start - Index of first character in the range.
        length - Length of the range.
        Returns:

        Text on the page between passed ranges. Text lines end with CRLF (`\r\n`).

      • getPageText

        @NonNull() abstract String getPageText(@IntRange(from = 0) int pageIndex, @NonNull() RectF rectF)

        Returns text content inside given page rectangle.

        Parameters:
        pageIndex - 0-indexed page number.
        rectF - Page rectangle in the PDF coordinates.
        Returns:

        Text on the page inside given page rect. Text lines end with CRLF (`\r\n`).

      • getPageTextLength

         abstract int getPageTextLength(@IntRange(from = 0) int pageIndex)

        Gets number of characters in text on the page.

        Parameters:
        pageIndex - 0-indexed page number.
        Returns:

        Number of characters in page text.

      • getOutline

        @NonNull() abstract List<OutlineElement> getOutline()

        Returns list of top-level (outline / table-of-contents) bookmarks. Bookmarks are organized in a tree-like structure and can have children. Note that this may take a while and should not be called on the main thread. If you want a quick check for whether document has outline, use hasOutline.

        Note: When this document is a compound document, calling this method will only ever return the outline of the first document source.

        Returns:

        List of top-level bookmarks. If no outline elements exist, the returned list will be empty.

      • getOutlineAsync

        @NonNull() abstract Single<List<OutlineElement>> getOutlineAsync()

        Returns list of top-level (outline / table-of-contents) bookmarks, asynchronously. Bookmarks are organized in a tree-like structure and can have children.

        Note: When this document is a compound document, calling this method will only ever return the outline of the first document source.

        Returns:

        Single emitting the list of top-level bookmarks or an empty list if no outline elements exist.

      • hasOutline

         abstract boolean hasOutline()

        Checks whether this document has outline / table of contents

        Returns:

        true when the document has outline, false if not.

      • getPageTextRects

        @NonNull() abstract List<RectF> getPageTextRects(@IntRange(from = 0) int pageIndex, int startIndex, int length)

        Returns the rects of the range of characters on a page.

        Parameters:
        pageIndex - Page number of the page, zero indexed.
        startIndex - Index of the starting character.
        length - Number of characters in sequence.
        Returns:

        List of rects of the characters on page in PDF point (1/72 of an inch) units. May be an empty list if the character is not represented visually.

      • getPageTextRects

        @NonNull() abstract List<RectF> getPageTextRects(@IntRange(from = 0) int pageIndex, int startIndex, int length, boolean markupPadding)

        Returns the rects of the range of characters on a page.

        Parameters:
        pageIndex - Page number of the page, zero indexed.
        startIndex - Index of the starting character.
        length - Number of characters in sequence.
        markupPadding - Take the font height into account in the rects to make better suited for being displayed around the text.
        Returns:

        List of rects of the characters on page in PDF point (1/72 of an inch) units. May be an empty list if the character is not represented visually.

      • getCharIndexAt

         abstract int getCharIndexAt(@IntRange(from = 0) int pageIndex, float x, float y)

        Return the index of the closest character whose rect intersects the given x and y coordinates.

        Parameters:
        pageIndex - Page number of the page, zero indexed.
        x - X coordinate in PDF point units (usually 1/72 of an inch).
        y - Y coordinate in PDF point units (usually 1/72 of an inch).
        Returns:

        The index of the selected character (zero indexed) or -1 if no character was found at the given coordinates.

      • getPageRotation

         abstract int getPageRotation(@IntRange(from = 0) int pageIndex)

        Returns a page rotation in degrees.

        Parameters:
        pageIndex - Page index of the requested page, zero indexed.
        Returns:

        Rotation of the page in degrees (clockwise).

      • getRotationOffset

         abstract int getRotationOffset(@IntRange(from = 0) int pageIndex)

        Returns the rotation offset applied to this page in degrees.

        Parameters:
        pageIndex - Page index of the requested page, zero indexed.
        Returns:

        Rotation offset of the page in degrees (clockwise).

      • getPageBox

         abstract RectF getPageBox(@IntRange(from = 0) int pageIndex, @NonNull() PdfBox box)

        Returns rectangle describing one of the PDF page boxes. If the page box dimension is not present in the PDF document, it's considered to be as large as the actual page size from getPageSize.

        Parameters:
        pageIndex - Page number of the page to render, zero indexed.
        box - Box to retrieve for the page, from PdfBox.
        Returns:

        Rectangle describing the page box in PDF coordinates.

      • renderPageToBitmap

        @NonNull() abstract Bitmap renderPageToBitmap(@NonNull() Context context, int pageIndex, int width, int height)

        Renders page to a bitmap.

        Parameters:
        context - Application context.
        pageIndex - Page number of the page to render, zero indexed.
        width - Bitmap width.
        height - Bitmap height.
        Returns:

        Bitmap with rendered page.

      • renderPageToBitmap

        @NonNull() abstract Bitmap renderPageToBitmap(@NonNull() Context context, int pageIndex, int width, int height, @NonNull() PageRenderConfiguration configuration)

        Renders page to a bitmap.

        Parameters:
        context - Application context.
        pageIndex - Page number of the page to render, zero indexed.
        width - Bitmap width.
        height - Bitmap height.
        configuration - Advanced configuration options.
        Returns:

        Bitmap with rendered page.

      • renderPageToBitmapAsync

        @NonNull() abstract Single<Bitmap> renderPageToBitmapAsync(@NonNull() Context context, int pageIndex, int width, int height)

        Renders page to a bitmap.

        Parameters:
        context - Application context.
        pageIndex - Page number of the page to render, zero indexed.
        width - Bitmap width.
        height - Bitmap height.
        Returns:

        Single which returns rendered page when the process is done.

      • renderPageToBitmapAsync

        @NonNull() abstract Single<Bitmap> renderPageToBitmapAsync(@NonNull() Context context, @IntRange(from = 0) int pageIndex, int width, int height, @NonNull() PageRenderConfiguration configuration)

        Renders page to a bitmap.

        Parameters:
        context - Application context.
        pageIndex - Page number of the page to render, zero indexed.
        width - Bitmap width.
        height - Bitmap height.
        configuration - Advanced configuration options.
        Returns:

        Single which returns rendered page when the process is done.

      • save

         abstract void save(@NonNull() String path)

        Saves the document to an external file even if it hasn't been changed. Note that this may take a while and should not be called on the main thread. This will not clear the wasModified flag on this document instance, and will not replace the source of this document either (i.e. subsequent calls to saveIfModified will still save the document back to the original file).

        Parameters:
        path - Absolute filepath to the output document file.
      • save

         abstract void save(@NonNull() String path, @NonNull() DocumentSaveOptions saveOptions)

        Saves the document to an external file even if it hasn't been changed. Note that this may take a while and should not be called on the main thread. This will not clear the wasModified flag on this document instance, and will not replace the source of this document either (i.e. subsequent calls to saveIfModified will still save the document back to the original file).

        Parameters:
        path - Absolute filepath to the output document file.
        saveOptions - Save options for the document, may be null to use default set.
      • saveIfModified

         abstract boolean saveIfModified()

        Saves the document to original location if it has been changed. If there were no changes to the document, the document file will not be modified. Note that this may take a while and should not be called on the main thread.

        Returns:

        true if the file was modified and changes were saved. false if there was nothing to save.

      • saveIfModified

         abstract boolean saveIfModified(@NonNull() DocumentSaveOptions saveOptions)

        Saves the document to original location if it has been changed. If there were no changes to the document, the document file will not be modified. Note that this may take a while and should not be called on the main thread.

        Parameters:
        saveOptions - Save options for the document.
        Returns:

        true if the file was modified and changes were saved, false if there was nothing to save.

      • saveIfModified

         abstract boolean saveIfModified(@NonNull() String path)

        Saves the document to passed location if it has been changed. If there were no changes to the document, the output file won't be modified. Note that this may take a while and should not be called on the main thread. This will not clear the wasModified flag on this document instance, and will not replace the source of this document either (i.e. subsequent calls to saveIfModified will still save the document back to the original file).

        Parameters:
        path - Absolute filepath to which to save the document.
        Returns:

        true if the file was modified and changes were saved, false if there was nothing to save.

      • saveIfModified

         abstract boolean saveIfModified(@NonNull() String path, @NonNull() DocumentSaveOptions saveOptions)

        Saves the document to passed location if it has been changed. If there were no changes to the document, the output file won't be modified. Note that this may take a while and should not be called on the main thread. This will not clear the wasModified flag on this document instance, and will not replace the source of this document either (i.e. subsequent calls to saveIfModified will still save the document back to the original file).

        Parameters:
        path - Absolute filepath to which to save the document.
        saveOptions - Save options for the document.
        Returns:

        true if the file was modified and changes were saved, false if there was nothing to save.

      • saveAsync

        @NonNull() abstract Completable saveAsync(@NonNull() String path)

        Saves the document to an external file even if it hasn't been changed. This will not clear the wasModified flag on this document instance, and will not replace the source of this document either (i.e. subsequent calls to saveIfModified will still save the document back to the original file).

        Parameters:
        path - Absolute filepath to the output document file.
        Returns:

        Completable for the save process.

      • saveAsync

        @NonNull() abstract Completable saveAsync(@NonNull() String path, @NonNull() DocumentSaveOptions saveOptions)

        Saves the document to an external file even if it hasn't been changed. This will not clear the wasModified flag on this document instance, and will not replace the source of this document either (i.e. subsequent calls to saveIfModified will still save the document back to the original file).

        Parameters:
        path - Absolute filepath to the output document file.
        saveOptions - Save options for the document.
        Returns:

        Completable for the save process.

      • saveIfModifiedAsync

        @NonNull() abstract Single<Boolean> saveIfModifiedAsync()

        Saves the document back to original location if it has been changed. If there were no changes to the document, the document file will not be modified.

        Returns:

        Single observable returning true if file was saved or false if there was no changes to be saved.

      • saveIfModifiedAsync

        @NonNull() abstract Single<Boolean> saveIfModifiedAsync(@NonNull() DocumentSaveOptions saveOptions)

        Saves the document back to original location if it has been changed. If there were no changes to the document, the document file will not be modified.

        Parameters:
        saveOptions - Save options for the document.
        Returns:

        Single observable returning true if file was saved or false if there was no changes to be saved.

      • saveIfModifiedAsync

        @NonNull() abstract Single<Boolean> saveIfModifiedAsync(@NonNull() String path)

        Saves the document to an external file if it has been changed. This will not clear the wasModified flag on this document instance, and will not replace the source of this document either (i.e. subsequent calls to saveIfModified will still save the document back to the original file).

        Parameters:
        path - Absolute filepath to which to save the document.
        Returns:

        Single observable returning true if file was saved or false if there was no changes to be saved.

      • saveIfModifiedAsync

        @NonNull() abstract Single<Boolean> saveIfModifiedAsync(@NonNull() String path, @NonNull() DocumentSaveOptions saveOptions)

        Saves the document to an external file if it has been changed. This will not clear the wasModified flag on this document instance, and will not replace the source of this document either (i.e. subsequent calls to saveIfModified will still save the document back to the original file).

        Parameters:
        path - Absolute filepath to which to save the document.
        saveOptions - Save options for the document, may be null to use default set.
        Returns:

        Single observable returning true if file was saved or false if there was no changes to be saved.

      • wasModified

         abstract boolean wasModified()

        Returns true if this document was modified and should be saved to retain changes.

        Returns:

        true if this document was modified and should be saved.

      • getDefaultDocumentSaveOptions

        @NonNull() abstract DocumentSaveOptions getDefaultDocumentSaveOptions()

        Returns a default set of document save options which have same permissions, password and PDF version set as this document.

        Returns:

        Default set of document options that share properties with this document.

      • getTitle

        @Nullable() abstract String getTitle()

        Returns a document title. Resolved in this order:

        • Document title from metadata
        • Document title
        Returns:

        Document title or null if no title is available.

      • addLongTermValidation

        @NonNull() abstract Completable addLongTermValidation(@NonNull() SignatureFormElement signatureFormElement, @NonNull() List<X509Certificate> certificates)

        This adds long term validation to an existing signature form element that has already been signed or refreshes that information if the signature is already LTV enabled.

        com.pspdfkit.signatures.TrustedKeyStore needs to contain the trusted root certificate of the `certificates` used before this method is called.

        Parameters:
        signatureFormElement - : The form element that should have long term validation information added to.
        certificates - : The certificates to use for adding getting the revocation status for adding long term validation.
      • initPageCache

         abstract void initPageCache()

        Pre-fetches rotations, sizes and labels for all pages on a background thread. Caching will only be performed once (for the first caller). If you need a callback to be notified of when caching is done, use the async variant initPageCacheAsync instead.

      • initPageCacheAsync

        @NonNull() abstract Completable initPageCacheAsync()

        Pre-fetches rotations, sizes and labels for all pages on a background thread. Caching will only be performed once (for the first subscriber).

        Returns:

        A completable that will perform caching on a background thread once subscribed (only for the first subscriber). All subsequent subscribers will only receive the completion event as soon as the cache is built.

      • invalidateCache

         abstract void invalidateCache()

        Invalidates the rendered cache of all the pages for this document. Use this method if the document is not updated after a change, or changed externally, and needs to be re-rendered.

        Note: this call may block for a while and should not be invoked on the main thread.

      • invalidateCacheForPage

         abstract void invalidateCacheForPage(@IntRange(from = 0) int pageIndex)

        Invalidates the rendered cache of the given pageIndex for this document. Use this method if a single page of the document is not updated after a change, or changed externally, and needs to be re-rendered.

        Note: this call may block for a while and should not be invoked on the main thread.

        Parameters:
        pageIndex - 0-based index of the page to refresh.
      • isAutomaticLinkGenerationEnabled

         abstract boolean isAutomaticLinkGenerationEnabled()

        Whether or not automatic link generation is enabled. This property dictates if the document's text should be parsed and any clickable links automatically generated with its corresponding com.pspdfkit.annotations.LinkAnnotation

        Returns:

        true if automatic link generation is enabled.

      • setAutomaticLinkGenerationEnabled

         abstract void setAutomaticLinkGenerationEnabled(boolean enabled)

        Enables or disables automatic link generation. This will parse the PDF page text and automatically generate clickable links (and corresponding objects) for text that looks like a HTTP or a similar link.

        Enabled by default.

        Parameters:
        enabled - true if link generation should be enabled, false otherwise.
      • setRotationOffset

         abstract void setRotationOffset(int pageRotation, @IntRange(from = 0) int pageIndex)

        Applies a temporary rotation to the specified page of this document. This will change the size reported by the document to match the new rotation. The document will not be modified by this. If you plan on applying a rotation to multiple pages use setRotationOffsets.

        Parameters:
        pageRotation - One of NO_ROTATION, ROTATION_90, ROTATION_180, ROTATION_270.
        pageIndex - The page to apply the rotation to.
      • setRotationOffsets

         abstract void setRotationOffsets(@NonNull() SparseIntArray pageRotations)

        Applies a temporary rotation to the specified pages of this document. This will change the size reported by the document to match the new rotation. The document will not be modified by this. If you plan on applying a rotation to a single page use setRotationOffset.

        Parameters:
        pageRotations - A SparseIntArray mapping the page index to the desired rotation.
      • getPageBinding

        @NonNull() abstract PageBinding getPageBinding()

        Returns the current document's PageBinding. This property sets how the document is displayed, either left to right (page indexed 0 will be to the left), or right to left (page indexed 0 will be on the right).

        Returns:

        The current PageBinding set on this document.

      • setPageBinding

         abstract void setPageBinding(@NonNull() PageBinding pageBinding)

        Sets the PageBinding controlling in which direction pages of documents are laid out. This will be stored in the document metadata and persisted when reopening the document.

        Parameters:
        pageBinding - The PageBinding to set on the document.
      • getHashForDocumentRange

         abstract Array<byte> getHashForDocumentRange(@NonNull() List<Long> range, @NonNull() HashAlgorithm hashAlgorithm)

        Returns the hash of a particular byte range of the document. This method works only on the first source of a compound document, use getHashForDocumentRange if you want to digest other sources.

        Parameters:
        range - The byte range of the part of the document that will be hashed.
        hashAlgorithm - The hash algorithm that will be used to generate the hashed data.
        Returns:

        Digest of the requested document range.

      • getHashForDocumentRange

         abstract Array<byte> getHashForDocumentRange(int sourceIndex, @NonNull() List<Long> range, @NonNull() HashAlgorithm hashAlgorithm)

        Returns the hash of a particular byte range of the document.

        Parameters:
        sourceIndex - Index of document source that should be hashed (valid only for compound documents).
        range - The byte range of the part of the document that will be hashed.
        hashAlgorithm - The hash algorithm that will be used to generate the hashed data.
        Returns:

        Digest of the requested document range.

      • hasEmbeddedFile

         abstract boolean hasEmbeddedFile()

        Checks whether this document has embedded files, which includes all the file annotations

        Returns:

        true when the document has embedded files, false if not.

      • getTextForBlocks

         abstract String getTextForBlocks(@NonNull() List<TextBlock> textBlocks)

        Returns page text for a list of text blocks. The text is created by sequentially concatenating text blocks with a single space used as a separator.

        Parameters:
        textBlocks - List of text blocks to return text for.
        Returns:

        String from the given text blocks.