Class PdfAChecker

  • All Implemented Interfaces:
    IValidationChecker
    Direct Known Subclasses:
    PdfA1Checker

    public abstract class PdfAChecker
    extends java.lang.Object
    implements IValidationChecker
    An abstract class that will run through all necessary checks defined in the different PDF/A standards and levels. A number of common checks are executed in this class, while standard-dependent specifications are implemented in the available subclasses. The standard that is followed is the series of ISO 19005 specifications, currently generations 1 through 3. The ZUGFeRD standard is derived from ISO 19005-3. While it is possible to subclass this method and implement its abstract methods in client code, this is not encouraged and will have little effect. It is not possible to plug custom implementations into iText, because iText should always refuse to create non-compliant PDF/A, which would be possible with client code implementations. Any future generations of the PDF/A standard and its derivates will get their own implementation in the iText - pdfa project.
    • Field Detail

      • ICC_COLOR_SPACE_RGB

        public static final java.lang.String ICC_COLOR_SPACE_RGB
        The Red-Green-Blue color profile as defined by the International Color Consortium.
        See Also:
        Constant Field Values
      • ICC_COLOR_SPACE_CMYK

        public static final java.lang.String ICC_COLOR_SPACE_CMYK
        The Cyan-Magenta-Yellow-Key (black) color profile as defined by the International Color Consortium.
        See Also:
        Constant Field Values
      • ICC_COLOR_SPACE_GRAY

        public static final java.lang.String ICC_COLOR_SPACE_GRAY
        The Grayscale color profile as defined by the International Color Consortium.
        See Also:
        Constant Field Values
      • ICC_DEVICE_CLASS_OUTPUT_PROFILE

        public static final java.lang.String ICC_DEVICE_CLASS_OUTPUT_PROFILE
        The Output device class
        See Also:
        Constant Field Values
      • ICC_DEVICE_CLASS_MONITOR_PROFILE

        public static final java.lang.String ICC_DEVICE_CLASS_MONITOR_PROFILE
        The Monitor device class
        See Also:
        Constant Field Values
      • maxGsStackDepth

        public static final int maxGsStackDepth
        The maximum Graphics State stack depth in PDF/A documents, i.e. the maximum number of graphics state operators with code q that may be opened (i.e. not yet closed by a corresponding Q) at any point in a content stream sequence. Defined as 28 by PDF/A-1 section 6.1.12, by referring to the PDF spec Appendix C table 1 "architectural limits".
        See Also:
        Constant Field Values
      • pdfAOutputIntentDestProfile

        protected PdfStream pdfAOutputIntentDestProfile
      • pdfAOutputIntentColorSpace

        protected java.lang.String pdfAOutputIntentColorSpace
      • gsStackDepth

        protected int gsStackDepth
      • rgbIsUsed

        @Deprecated
        protected boolean rgbIsUsed
        Deprecated.
      • cmykIsUsed

        @Deprecated
        protected boolean cmykIsUsed
        Deprecated.
      • grayIsUsed

        @Deprecated
        protected boolean grayIsUsed
        Deprecated.
      • rgbUsedObjects

        protected java.util.Set<PdfObject> rgbUsedObjects
      • cmykUsedObjects

        protected java.util.Set<PdfObject> cmykUsedObjects
      • grayUsedObjects

        protected java.util.Set<PdfObject> grayUsedObjects
      • checkedObjects

        protected java.util.Set<PdfObject> checkedObjects
        Contains some objects that are already checked. NOTE: Not all objects that were checked are stored in that set. This set is used for avoiding double checks for actions, signatures, xObjects and page objects; and for letting those objects to be manually flushed. Use this mechanism carefully: objects that are able to be changed (or at least if object's properties that shall be checked are able to be changed) shouldn't be marked as checked if they are not to be flushed immediately.
      • fullCheckMode

        private boolean fullCheckMode
    • Constructor Detail

      • PdfAChecker

        protected PdfAChecker​(PdfAConformanceLevel conformanceLevel)
        Creates a PdfAChecker with the required conformance level.
        Parameters:
        conformanceLevel - the required conformance level
    • Method Detail

      • checkDocument

        public void checkDocument​(PdfCatalog catalog)
        This method checks a number of document-wide requirements of the PDF/A standard. The algorithms of some of these checks vary with the PDF/A level and thus are implemented in subclasses; others are implemented as private methods in this class.
        Parameters:
        catalog - The catalog being checked
      • checkSinglePage

        public void checkSinglePage​(PdfPage page)
        This method checks all requirements that must be fulfilled by a page in a PDF/A document.
        Parameters:
        page - the page that must be checked
      • checkPdfObject

        public void checkPdfObject​(PdfObject obj)
        This method checks the requirements that must be fulfilled by a COS object in a PDF/A document.
        Parameters:
        obj - the COS object that must be checked
      • isFullCheckMode

        public boolean isFullCheckMode()
        In full check mode all objects will be tested for ISO conformance. If full check mode is switched off objects which were not modified might be skipped to speed up the validation of the document
        Returns:
        true if full check mode is switched on
        See Also:
        PdfObject.isModified()
      • setFullCheckMode

        public void setFullCheckMode​(boolean fullCheckMode)
        In full check mode all objects will be tested for ISO conformance. If full check mode is switched off objects which were not modified might be skipped to speed up the validation of the document
        Parameters:
        fullCheckMode - is a new value for full check mode switcher
        See Also:
        PdfObject.isModified()
      • objectIsChecked

        public boolean objectIsChecked​(PdfObject object)
        Remembers which objects have already been checked, in order to avoid redundant checks.
        Parameters:
        object - the object to check
        Returns:
        whether or not the object has already been checked
      • checkTagStructureElement

        public void checkTagStructureElement​(PdfObject obj)
        This method checks compliance of the tag structure elements, such as struct elements or parent tree entries.
        Parameters:
        obj - an object that represents tag structure element.
      • checkSignature

        public void checkSignature​(PdfDictionary signatureDict)
        This method checks compliance of the signature dictionary
        Parameters:
        signatureDict - a PdfDictionary containing the signature.
      • checkSignatureType

        @Deprecated
        public void checkSignatureType​(boolean isCAdES)
        Deprecated.
        Will become abstract in the next major release.
        This method checks compliance of the signature type
        Parameters:
        isCAdES - true is CAdES sig type is used, false otherwise.
      • checkCanvasStack

        public abstract void checkCanvasStack​(char stackOperation)
        This method checks compliance with the graphics state architectural limitation, explained by maxGsStackDepth.
        Parameters:
        stackOperation - the operation to check the graphics state counter for
      • checkInlineImage

        public abstract void checkInlineImage​(PdfStream inlineImage,
                                              PdfDictionary currentColorSpaces)
        This method checks compliance with the inline image restrictions in the PDF/A specs, specifically filter parameters.
        Parameters:
        inlineImage - a PdfStream containing the inline image
        currentColorSpaces - a PdfDictionary containing the color spaces used in the document
      • checkColor

        @Deprecated
        public abstract void checkColor​(Color color,
                                        PdfDictionary currentColorSpaces,
                                        java.lang.Boolean fill,
                                        PdfStream contentStream)
        Deprecated.
        in favor of checkColor(CanvasGraphicsState gState, Color color, PdfDictionary currentColorSpaces, Boolean fill, PdfStream contentStream)
        This method checks compliance with the color restrictions imposed by the available color spaces in the document. This method will be abstract in update 7.2
        Parameters:
        color - the color to check
        currentColorSpaces - a PdfDictionary containing the color spaces used in the document
        fill - whether the color is used for fill or stroke operations
        contentStream - current content stream
      • checkColor

        @Deprecated
        public void checkColor​(CanvasGraphicsState gState,
                               Color color,
                               PdfDictionary currentColorSpaces,
                               java.lang.Boolean fill,
                               PdfStream contentStream)
        Deprecated.
        This method will be abstract in next major release
        This method checks compliance with the color restrictions imposed by the available color spaces in the document.
        Parameters:
        gState - canvas graphics state
        color - the color to check
        currentColorSpaces - a PdfDictionary containing the color spaces used in the document
        fill - whether the color is used for fill or stroke operations
        contentStream - current content stream
      • checkColorSpace

        @Deprecated
        public void checkColorSpace​(PdfColorSpace colorSpace,
                                    PdfObject pdfObject,
                                    PdfDictionary currentColorSpaces,
                                    boolean checkAlternate,
                                    java.lang.Boolean fill)
        Deprecated.
        Will become abstract in the next major release.
        This method performs a range of checks on the given color space, depending on the type and properties of that color space.
        Parameters:
        colorSpace - the color space to check
        pdfObject - the pdf object to check color space in
        currentColorSpaces - a PdfDictionary containing the color spaces used in the document
        checkAlternate - whether or not to also check the parent color space
        fill - whether the color space is used for fill or stroke operations
      • checkColorSpace

        @Deprecated
        public void checkColorSpace​(PdfColorSpace colorSpace,
                                    PdfDictionary currentColorSpaces,
                                    boolean checkAlternate,
                                    java.lang.Boolean fill)
        Deprecated.
        in favor of checkColorSpace(PdfColorSpace colorSpace, PdfObject object, PdfDictionary currentColorSpaces, boolean checkAlternate, Boolean fill)
        This method performs a range of checks on the given color space, depending on the type and properties of that color space.
        Parameters:
        colorSpace - the color space to check
        currentColorSpaces - a PdfDictionary containing the color spaces used in the document
        checkAlternate - whether or not to also check the parent color space
        fill - whether the color space is used for fill or stroke operations
      • setPdfAOutputIntentColorSpace

        public void setPdfAOutputIntentColorSpace​(PdfDictionary catalog)
        Set Pdf A output intent color space.
        Parameters:
        catalog - Catalog dictionary to retrieve the color space from.
      • checkRenderingIntent

        public abstract void checkRenderingIntent​(PdfName intent)
        Checks whether the rendering intent of the document is within the allowed range of intents. This is defined in ISO 19005-1 section 6.2.9, and unchanged in newer generations of the PDF/A specification.
        Parameters:
        intent - the intent to be analyzed
      • checkFontGlyphs

        public abstract void checkFontGlyphs​(PdfFont font,
                                             PdfStream contentStream)
        Performs a check of the each font glyph as a Form XObject. See ISO 19005-2 Annex A.5. This only applies to type 3 fonts. This method will be abstract in update 7.2
        Parameters:
        font - PdfFont to be checked
        contentStream - stream containing checked font
      • checkExtGState

        public abstract void checkExtGState​(CanvasGraphicsState extGState,
                                            PdfStream contentStream)
        Performs a number of checks on the graphics state, among others ISO 19005-1 section 6.2.8 and 6.4 and ISO 19005-2 section 6.2.5 and 6.2.10. This method will be abstract in the update 7.2
        Parameters:
        extGState - the graphics state to be checked
        contentStream - current content stream
      • checkFont

        public abstract void checkFont​(PdfFont pdfFont)
        Performs a number of checks on the font. See ISO 19005-1 section 6.3, ISO 19005-2 and ISO 19005-3 section 6.2.11. Be aware that not all constraints defined in the ISO are checked in this method, for most of them we consider that iText always creates valid fonts.
        Parameters:
        pdfFont - font to be checked
      • checkXrefTable

        public abstract void checkXrefTable​(PdfXrefTable xrefTable)
        Verify the conformity of the cross-reference table.
        Parameters:
        xrefTable - is the Xref table
      • checkCrypto

        @Deprecated
        public void checkCrypto​(PdfObject crypto)
        Deprecated.
        Will become abstract in the next major release.
        Verify the conformity of encryption usage.
        Parameters:
        crypto - Encryption object to verify.
      • checkText

        @Deprecated
        public void checkText​(java.lang.String text,
                              PdfFont font)
        Deprecated.
        Will become abstract in the next major release.
        Verify the conformity of the text written by the specified font.
        Parameters:
        text - Text to verify.
        font - Font to verify the text against.
      • checkContentStream

        protected abstract void checkContentStream​(PdfStream contentStream)
        Attest content stream conformance with appropriate specification. Throws PdfAConformanceException if any discrepancy was found
        Parameters:
        contentStream - is a content stream to validate
      • checkContentStreamObject

        protected void checkContentStreamObject​(PdfObject object)
        Verify the conformity of the operand of content stream with appropriate specification. Throws PdfAConformanceException if any discrepancy was found
        Parameters:
        object - is an operand of content stream to validate
      • getMaxNumberOfIndirectObjects

        protected abstract long getMaxNumberOfIndirectObjects()
        Retrieve maximum allowed number of indirect objects in conforming document.
        Returns:
        maximum allowed number of indirect objects
      • getForbiddenActions

        protected abstract java.util.Set<PdfName> getForbiddenActions()
        Retrieve forbidden actions in conforming document.
        Returns:
        set of PdfName with forbidden actions
      • getAllowedNamedActions

        protected abstract java.util.Set<PdfName> getAllowedNamedActions()
        Retrieve allowed actions in conforming document.
        Returns:
        set of PdfName with allowed named actions
      • checkAction

        protected abstract void checkAction​(PdfDictionary action)
        Checks if the action is allowed.
        Parameters:
        action - to be checked
      • checkAnnotation

        protected abstract void checkAnnotation​(PdfDictionary annotDic)
        Verify the conformity of the annotation dictionary.
        Parameters:
        annotDic - the annotation PdfDictionary to be checked
      • checkCatalogValidEntries

        protected abstract void checkCatalogValidEntries​(PdfDictionary catalogDict)
        Checks if entries in catalog dictionary are valid.
        Parameters:
        catalogDict - the catalog PdfDictionary to be checked
      • checkColorsUsages

        @Deprecated
        protected abstract void checkColorsUsages()
        Deprecated.
        in favor of checkPageColorsUsages(PdfDictionary pageDict, PdfDictionary pageResources)
        Verify the conformity of used color spaces.
      • checkPageColorsUsages

        @Deprecated
        protected void checkPageColorsUsages​(PdfDictionary pageDict,
                                             PdfDictionary pageResources)
        Deprecated.
        Will become abstract in the next major release.
        Verify the conformity of used color spaces on the page.
        Parameters:
        pageDict - the PdfDictionary contains contents for colors to be checked.
        pageResources - the PdfDictionary contains resources for colors to be checked.
      • checkImage

        protected abstract void checkImage​(PdfStream image,
                                           PdfDictionary currentColorSpaces)
        Verify the conformity of the given image.
        Parameters:
        image - the image to check
        currentColorSpaces - the PdfDictionary containing the color spaces used in the document
      • checkFileSpec

        protected abstract void checkFileSpec​(PdfDictionary fileSpec)
        Verify the conformity of the file specification dictionary.
        Parameters:
        fileSpec - the PdfDictionary containing file specification to be checked
      • checkForm

        protected abstract void checkForm​(PdfDictionary form)
        Verify the conformity of the form dictionary.
        Parameters:
        form - the form PdfDictionary to be checked
      • checkFormXObject

        protected abstract void checkFormXObject​(PdfStream form)
        Verify the conformity of the form XObject dictionary.
        Parameters:
        form - the PdfStream to check
      • checkLogicalStructure

        protected abstract void checkLogicalStructure​(PdfDictionary catalog)
        Performs a number of checks on the logical structure of the document.
        Parameters:
        catalog - the catalog PdfDictionary to check
      • checkMetaData

        protected abstract void checkMetaData​(PdfDictionary catalog)
        Performs a number of checks on the metadata of the document.
        Parameters:
        catalog - the catalog PdfDictionary to check
      • checkNonSymbolicTrueTypeFont

        protected abstract void checkNonSymbolicTrueTypeFont​(PdfTrueTypeFont trueTypeFont)
        Verify the conformity of the non-symbolic TrueType font.
        Parameters:
        trueTypeFont - the PdfTrueTypeFont to check
      • checkOutputIntents

        protected abstract void checkOutputIntents​(PdfDictionary catalogOrPageDict)
        Verify the conformity of the output intents array in the catalog dictionary.
        Parameters:
        catalogOrPageDict - the PdfDictionary of a catalog or page to check
      • checkPageObject

        protected abstract void checkPageObject​(PdfDictionary page,
                                                PdfDictionary pageResources)
        Verify the conformity of the page dictionary.
        Parameters:
        page - the PdfDictionary to check
        pageResources - the page's resources dictionary
      • checkPageSize

        protected abstract void checkPageSize​(PdfDictionary page)
        Checks the allowable size of the page.
        Parameters:
        page - the PdfDictionary of page which size being checked
      • checkPdfArray

        protected abstract void checkPdfArray​(PdfArray array)
        Verify the conformity of the PDF array.
        Parameters:
        array - the PdfArray to check
      • checkPdfDictionary

        protected abstract void checkPdfDictionary​(PdfDictionary dictionary)
        Verify the conformity of the PDF dictionary.
        Parameters:
        dictionary - the PdfDictionary to check
      • checkPdfName

        protected abstract void checkPdfName​(PdfName name)
        Verify the conformity of the PDF name.
        Parameters:
        name - the PdfName to check
      • checkPdfNumber

        protected abstract void checkPdfNumber​(PdfNumber number)
        Verify the conformity of the PDF number.
        Parameters:
        number - the PdfNumber to check
      • checkPdfStream

        protected abstract void checkPdfStream​(PdfStream stream)
        Verify the conformity of the PDF stream.
        Parameters:
        stream - the PdfStream to check
      • checkPdfString

        protected abstract void checkPdfString​(PdfString string)
        Verify the conformity of the PDF string.
        Parameters:
        string - the PdfString to check
      • checkSymbolicTrueTypeFont

        protected abstract void checkSymbolicTrueTypeFont​(PdfTrueTypeFont trueTypeFont)
        Verify the conformity of the symbolic TrueType font.
        Parameters:
        trueTypeFont - the PdfTrueTypeFont to check
      • checkTrailer

        protected abstract void checkTrailer​(PdfDictionary trailer)
        Verify the conformity of the trailer dictionary.
        Parameters:
        trailer - the PdfDictionary of trailer to check
      • checkCatalog

        @Deprecated
        protected void checkCatalog​(PdfCatalog catalog)
        Deprecated.
        Will become abstract in the next major release.
        Verify the conformity of the pdf catalog.
        Parameters:
        catalog - the PdfCatalog of trailer to check.
      • checkPageTransparency

        protected abstract void checkPageTransparency​(PdfDictionary pageDict,
                                                      PdfDictionary pageResources)
        Verify the conformity of the page transparency.
        Parameters:
        pageDict - the PdfDictionary contains contents for transparency to be checked
        pageResources - the PdfDictionary contains resources for transparency to be checked
      • checkResources

        @Deprecated
        protected void checkResources​(PdfDictionary resources)
        Deprecated.
        in favor of checkResources(PdfDictionary resources, PdfObject pdfObject)
        Verify the conformity of the resources dictionary.
        Parameters:
        resources - the PdfDictionary to be checked
      • checkResources

        protected void checkResources​(PdfDictionary resources,
                                      PdfObject pdfObject)
        Verify the conformity of the resources dictionary.
        Parameters:
        resources - the PdfDictionary to be checked
        pdfObject - the pdf object to check resources for
      • checkFlag

        protected static boolean checkFlag​(int flags,
                                           int flag)
        Checks if the specified flag is set.
        Parameters:
        flags - a set of flags specifying various characteristics of the PDF object
        flag - to be checked
        Returns:
        true if the specified flag is set
      • checkStructure

        protected static boolean checkStructure​(PdfAConformanceLevel conformanceLevel)
        Checks conformance level of PDF/A standard.
        Parameters:
        conformanceLevel - the PdfAConformanceLevel to be checked
        Returns:
        true if the specified conformanceLevel is a for PDF/A-1, PDF/A-2 or PDF/A-3
      • isContainsTransparencyGroup

        protected static boolean isContainsTransparencyGroup​(PdfDictionary dictionary)
        Checks whether the specified dictionary has a transparency group.
        Parameters:
        dictionary - the PdfDictionary to check
        Returns:
        true if and only if the specified dictionary has a PdfName.Group key and its value is a dictionary with PdfName.Transparency subtype
      • isAlreadyChecked

        protected boolean isAlreadyChecked​(PdfDictionary dictionary)
        Checks whether the specified dictionary was already checked.
        Parameters:
        dictionary - the PdfDictionary to check
        Returns:
        true if the specified dictionary was checked
      • checkResourcesOfAppearanceStreams

        protected void checkResourcesOfAppearanceStreams​(PdfDictionary appearanceStreamsDict)
        Checks resources of the appearance streams.
        Parameters:
        appearanceStreamsDict - the dictionary with appearance streams to check.
      • checkAppearanceStream

        protected void checkAppearanceStream​(PdfStream appearanceStream)
        Check single annotation appearance stream.
        Parameters:
        appearanceStream - the PdfStream to check
      • checkResourcesOfAppearanceStreams

        private void checkResourcesOfAppearanceStreams​(PdfDictionary appearanceStreamsDict,
                                                       java.util.Set<PdfObject> checkedObjects)
      • checkArrayRecursively

        private void checkArrayRecursively​(PdfArray array)
      • checkDictionaryRecursively

        private void checkDictionaryRecursively​(PdfDictionary dictionary)
      • checkPages

        private void checkPages​(PdfDocument document)
      • checkPage

        private void checkPage​(PdfPage page)
      • checkOpenAction

        private void checkOpenAction​(PdfObject openAction)
      • checkAnnotations

        private void checkAnnotations​(PdfDictionary page)
      • checkOutlines

        private void checkOutlines​(PdfOutline outline)
      • setCheckerOutputIntent

        private void setCheckerOutputIntent​(PdfDictionary outputIntent)