Class DocumentRevisionsValidator
- java.lang.Object
-
- com.itextpdf.signatures.validation.DocumentRevisionsValidator
-
public class DocumentRevisionsValidator extends java.lang.Object
Validator, which is responsible for document revisions validation according to doc-MDP and field-MDP rules.
-
-
Field Summary
Fields Modifier and Type Field Description (package private) static java.lang.String
ACCESS_PERMISSIONS_ADDED
private AccessPermissions
accessPermissions
(package private) static java.lang.String
ACROFORM_REMOVED
private java.util.Set<PdfDictionary>
addedTaggedObjects
(package private) static java.lang.String
ANNOTATIONS_MODIFIED
(package private) static java.lang.String
BASE_VERSION_DECREASED
(package private) static java.lang.String
BASE_VERSION_EXTENSION_NOT_PARSABLE
private java.util.Set<PdfObject>
checkedAnnots
(package private) static java.lang.String
DEVELOPER_EXTENSION_REMOVED
(package private) static java.lang.String
DIRECT_OBJECT
(package private) static java.lang.String
DOC_MDP_CHECK
(package private) static java.lang.String
DOCUMENT_WITHOUT_SIGNATURES
(package private) static java.lang.String
DSS_REMOVED
private static PdfDictionary
DUMMY_STRUCT_TREE_ELEMENT
private static float
EPS
(package private) static java.lang.String
EXTENSION_LEVEL_DECREASED
(package private) static java.lang.String
EXTENSIONS_REMOVED
(package private) static java.lang.String
EXTENSIONS_TYPE
(package private) static java.lang.String
FIELD_MDP_CHECK
(package private) static java.lang.String
FIELD_NOT_DICTIONARY
(package private) static java.lang.String
FIELD_REMOVED
(package private) static java.lang.String
LOCKED_FIELD_KIDS_ADDED
(package private) static java.lang.String
LOCKED_FIELD_KIDS_REMOVED
(package private) static java.lang.String
LOCKED_FIELD_MODIFIED
(package private) static java.lang.String
LOCKED_FIELD_REMOVED
private java.util.Set<java.lang.String>
lockedFields
private IMetaInfo
metaInfo
private java.util.Set<PdfDictionary>
newlyAddedFields
(package private) static java.lang.String
NOT_ALLOWED_ACROFORM_CHANGES
(package private) static java.lang.String
NOT_ALLOWED_CATALOG_CHANGES
(package private) static java.lang.String
NOT_ALLOWED_CERTIFICATION_SIGNATURE
(package private) static java.lang.String
OBJECT_REMOVED
(package private) static java.lang.String
PAGE_ANNOTATIONS_MODIFIED
(package private) static java.lang.String
PAGE_MODIFIED
(package private) static java.lang.String
PAGES_MODIFIED
(package private) static java.lang.String
PERMISSION_REMOVED
(package private) static java.lang.String
PERMISSIONS_REMOVED
(package private) static java.lang.String
PERMISSIONS_TYPE
private SignatureValidationProperties
properties
(package private) static java.lang.String
REFERENCE_REMOVED
private java.util.Set<PdfDictionary>
removedTaggedObjects
private AccessPermissions
requestedAccessPermissions
(package private) static java.lang.String
REVISIONS_READING_EXCEPTION
(package private) static java.lang.String
REVISIONS_RETRIEVAL_FAILED
(package private) static java.lang.String
REVISIONS_RETRIEVAL_FAILED_UNEXPECTEDLY
(package private) static java.lang.String
SIGNATURE_MODIFIED
(package private) static java.lang.String
SIGNATURE_REVISION_NOT_FOUND
(package private) static java.lang.String
STRUCT_TREE_CONTENT_MODIFIED
(package private) static java.lang.String
STRUCT_TREE_ELEMENT_MODIFIED
(package private) static java.lang.String
STRUCT_TREE_ROOT_ADDED
(package private) static java.lang.String
STRUCT_TREE_ROOT_MODIFIED
(package private) static java.lang.String
STRUCT_TREE_ROOT_NOT_DICT
(package private) static java.lang.String
STRUCT_TREE_ROOT_REMOVED
(package private) static java.lang.String
TABS_MODIFIED
(package private) static java.lang.String
TOO_MANY_CERTIFICATION_SIGNATURES
(package private) static java.lang.String
UNEXPECTED_ENTRY_IN_XREF
(package private) static java.lang.String
UNEXPECTED_FORM_FIELD
private ReportItem.ReportItemStatus
unexpectedXrefChangesStatus
(package private) static java.lang.String
UNKNOWN_ACCESS_PERMISSIONS
(package private) static java.lang.String
UNRECOGNIZED_ACTION
private Tuple2<java.util.Set<PdfIndirectReference>,java.util.Set<PdfIndirectReference>>
usuallyModifiedObjects
-
Constructor Summary
Constructors Modifier Constructor Description protected
DocumentRevisionsValidator(ValidatorChainBuilder chainBuilder)
Creates new instance ofDocumentRevisionsValidator
.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private void
addAllNestedArrayEntries(java.util.Set<PdfIndirectReference> allowedReferences, PdfArray pdfArray)
private void
addAllNestedDictionaryEntries(java.util.Set<PdfIndirectReference> allowedReferences, PdfDictionary dictionary)
private void
addPageEntriesToSet(PdfDictionary page, java.util.Set<PdfIndirectReference> set)
private void
addStructTreeElementsToSet(PdfArray structTreeRootKids, java.util.Set<PdfIndirectReference> set)
private void
addStructTreeElementsToSet(PdfObject structTreeRootKids, java.util.Set<PdfIndirectReference> set)
private void
addWidgetAnnotation(java.util.Set<PdfIndirectReference> allowedReferences, PdfDictionary annotDict)
private boolean
checkAllowedReferences(java.util.Set<PdfIndirectReference> currentAllowedReferences, java.util.Set<PdfIndirectReference> previousAllowedReferences, PdfIndirectReference indirectReference, PdfDocument documentWithoutRevision)
private void
collectRemovedAndAddedAnnotations(PdfArray previousAnnotations, PdfArray currentAnnotations)
private boolean
compareAcroForms(PdfDictionary prevAcroForm, PdfDictionary currAcroForm, ValidationReport report)
private boolean
compareAcroFormsWithFieldMDP(PdfDocument documentWithoutRevision, PdfDocument documentWithRevision, ValidationReport report)
private boolean
compareCatalogs(PdfDocument documentWithoutRevision, PdfDocument documentWithRevision, ValidationReport report, ValidationContext context)
private boolean
compareDss(PdfObject previousDss, PdfObject currentDss, ValidationReport report)
private boolean
compareExtensions(PdfObject previousExtensions, PdfObject currentExtensions, ValidationReport report)
private boolean
compareFields(PdfDictionary previousField, PdfDictionary currentField, ValidationReport report)
DocMDP level >= 2 allows setting values of the fields and accordingly update the widget appearances of them.private boolean
compareFormFields(PdfArray prevFields, PdfArray currFields, ValidationReport report)
private boolean
compareFormFieldWithFieldMDP(PdfDictionary previousField, PdfDictionary currentField, java.lang.String fieldName, ValidationReport report)
private boolean
compareIndirectReferencesObjNums(PdfObject prevObj, PdfObject currObj, ValidationReport report, java.lang.String type)
private boolean
comparePageAnnotations(PdfArray prevAnnots, PdfArray currAnnots, ValidationReport report)
private boolean
comparePageAnnotations(PdfDictionary prevAnnot, PdfDictionary currAnnot, ValidationReport report)
private boolean
comparePages(PdfDictionary prevPages, PdfDictionary currPages, ValidationReport report)
private static boolean
comparePdfArrays(PdfArray array1, PdfArray array2, java.util.List<Tuple2<PdfObject,PdfObject>> visitedObjects, Tuple2<java.util.Set<PdfIndirectReference>,java.util.Set<PdfIndirectReference>> usuallyModifiedObjects)
private static boolean
comparePdfDictionaries(PdfDictionary dictionary1, PdfDictionary dictionary2, java.util.List<Tuple2<PdfObject,PdfObject>> visitedObjects, Tuple2<java.util.Set<PdfIndirectReference>,java.util.Set<PdfIndirectReference>> usuallyModifiedObjects)
private static boolean
comparePdfObjects(PdfObject pdfObject1, PdfObject pdfObject2, Tuple2<java.util.Set<PdfIndirectReference>,java.util.Set<PdfIndirectReference>> usuallyModifiedObjects)
private static boolean
comparePdfObjects(PdfObject pdfObject1, PdfObject pdfObject2, java.util.List<Tuple2<PdfObject,PdfObject>> visitedObjects, Tuple2<java.util.Set<PdfIndirectReference>,java.util.Set<PdfIndirectReference>> usuallyModifiedObjects)
private static boolean
comparePdfStreams(PdfStream stream1, PdfStream stream2, java.util.List<Tuple2<PdfObject,PdfObject>> visitedObjects, Tuple2<java.util.Set<PdfIndirectReference>,java.util.Set<PdfIndirectReference>> usuallyModifiedObjects)
private boolean
comparePermissions(PdfObject previousPerms, PdfObject currentPerms, ValidationReport report)
private boolean
compareSignatureDictionaries(PdfObject prevSigDict, PdfObject curSigDict, ValidationReport report)
private boolean
compareSignatureReferenceDictionaries(PdfArray previousReferences, PdfArray currentReferences, ValidationReport report)
private boolean
compareStructTreeContents(PdfObject previousStructTreeContent, PdfObject currentStructTreeContent, ValidationReport report)
private boolean
compareStructTreeElementKids(PdfDictionary previousStructElement, PdfDictionary currentStructElement, ValidationReport report)
private boolean
compareStructTreeElements(PdfDictionary previousStructElement, PdfDictionary currentStructElement, ValidationReport report)
private boolean
compareStructTreeRoot(PdfObject previousStructTreeRoot, PdfObject currentStructTreeRoot, ValidationReport report)
private boolean
compareTabs(PdfName previousTabs, PdfName currentTabs)
private boolean
compareWidgets(PdfArray prevFields, PdfArray currFields, ValidationReport report)
private PdfDictionary
copyAcroformDictionary(PdfDictionary acroForm)
private PdfDictionary
copyCatalogEntriesToCompare(PdfDictionary catalog)
private PdfDictionary
copyFieldDictionary(PdfDictionary field)
private java.util.Set<PdfIndirectReference>
createAllowedDssEntries(PdfDocument document)
private void
createAllowedFormFieldEntries(PdfArray fields, java.util.Set<PdfIndirectReference> allowedReferences)
private java.util.Collection<PdfIndirectReference>
createAllowedPagesEntries(PdfDictionary pagesDictionary)
private java.util.Set<PdfIndirectReference>
createAllowedReferences(PdfDocument document)
private java.util.Set<PdfIndirectReference>
createAllowedStructTreeRootEntries(PdfDictionary structTreeRoot)
private void
createAllowedStructTreeRootKidsEntries(PdfArray structTreeRootKids, java.util.Set<PdfIndirectReference> allowedReferences)
private void
createAllowedStructTreeRootKidsEntries(PdfObject structTreeRootKids, java.util.Set<PdfIndirectReference> allowedReferences)
private void
createAllowedTreeEntries(PdfObject treeNode, java.util.Set<PdfIndirectReference> allowedReferences, PdfName contentName)
private boolean
createDocumentAndPerformOperation(DocumentRevision revision, PdfDocument originalDocument, ValidationReport report, java.util.function.Function<PdfDocument,java.lang.Boolean> operation)
private static java.io.InputStream
createInputStreamFromRevision(PdfDocument originalDocument, DocumentRevision revision)
private java.util.Set<PdfIndirectReference>
createUsuallyModifiedObjectsSet(PdfDocument document)
(package private) AccessPermissions
getAccessPermissions()
private PdfArray
getAnnotsNotAllowedToBeModified(PdfDictionary page)
private static PdfObject
getObjectFromStructTreeContent(PdfObject structTreeContent)
private boolean
isAllowedSignatureField(PdfDictionary field, ValidationReport report)
DocMDP level <=2 allows adding new fields in the following cases: docMDP level 1: allows adding only DocTimeStamp signature fields; docMDP level 2: same as level 1 and also adding and then signing signature fields, so signature dictionary shouldn't be null.private boolean
isAllowedStreamObj(PdfIndirectReference indirectReference, PdfDocument document)
private boolean
isCertificationSignature(PdfSignature signature)
private static boolean
isLinearizedPdf(PdfDocument originalDocument)
private static boolean
isMaxGenerationObject(PdfIndirectReference indirectReference)
private static boolean
isSameReference(PdfIndirectReference indirectReference1, PdfIndirectReference indirectReference2)
private static boolean
isStructTreeElement(PdfObject object)
private void
lockAllFormFields(DocumentRevision revision, java.util.List<java.lang.String> excludedFields, PdfDocument originalDocument, ValidationReport report)
private void
mergeRevisionsInLinearizedDocument(PdfDocument document, java.util.List<DocumentRevision> documentRevisions)
private java.util.Set<PdfDictionary>
populateFormFields(PdfArray fieldsArray)
private java.util.List<PdfDictionary>
populateWidgetAnnotations(PdfArray fieldsArray)
private void
removeAppearanceRelatedProperties(PdfDictionary annotDict)
private void
resetClassFields()
private PdfDictionary
retrieveTheSameField(java.util.Set<PdfDictionary> currFields, PdfDictionary previousField)
private boolean
revisionContainsSignature(DocumentRevision revision, java.lang.String signature, PdfDocument originalDocument, ValidationReport report)
DocumentRevisionsValidator
setAccessPermissions(AccessPermissions accessPermissions)
Set access permissions to be used during docMDP validation.DocumentRevisionsValidator
setEventCountingMetaInfo(IMetaInfo metaInfo)
Sets theIMetaInfo
that will be used during newPdfDocument
creations.DocumentRevisionsValidator
setUnexpectedXrefChangesStatus(ReportItem.ReportItemStatus status)
Set the status to be used for the report items produced during docMDP validation in case revision contains unexpected changes in the XREF table.private boolean
stopValidation(ValidationReport result, ValidationContext validationContext)
private void
updateApprovalSignatureAccessPermissions(PdfDictionary signatureField, ValidationReport report)
private void
updateApprovalSignatureFieldLock(DocumentRevision revision, PdfDictionary signatureField, PdfDocument document, ValidationReport report)
private void
updateCertificationSignatureAccessPermissions(PdfSignature signature, ValidationReport report)
ValidationReport
validateAllDocumentRevisions(ValidationContext context, PdfDocument document)
Validate all document revisions according to docMDP and fieldMDP transform methods.(package private) ValidationReport
validateAllDocumentRevisions(ValidationContext context, PdfDocument document, java.lang.String signatureName)
Validate all document revisions according to docMDP and fieldMDP transform methods and collect validation report related to the single signature field checks if specified.(package private) void
validateRevision(DocumentRevision previousRevision, DocumentRevision currentRevision, PdfDocument originalDocument, ValidationReport validationReport, ValidationContext context)
private boolean
validateRevision(ValidationReport validationReport, ValidationContext context, PdfDocument documentWithoutRevision, PdfDocument documentWithRevision, DocumentRevision currentRevision)
-
-
-
Field Detail
-
DOC_MDP_CHECK
static final java.lang.String DOC_MDP_CHECK
- See Also:
- Constant Field Values
-
FIELD_MDP_CHECK
static final java.lang.String FIELD_MDP_CHECK
- See Also:
- Constant Field Values
-
ACCESS_PERMISSIONS_ADDED
static final java.lang.String ACCESS_PERMISSIONS_ADDED
- See Also:
- Constant Field Values
-
ACROFORM_REMOVED
static final java.lang.String ACROFORM_REMOVED
- See Also:
- Constant Field Values
-
ANNOTATIONS_MODIFIED
static final java.lang.String ANNOTATIONS_MODIFIED
- See Also:
- Constant Field Values
-
BASE_VERSION_DECREASED
static final java.lang.String BASE_VERSION_DECREASED
- See Also:
- Constant Field Values
-
BASE_VERSION_EXTENSION_NOT_PARSABLE
static final java.lang.String BASE_VERSION_EXTENSION_NOT_PARSABLE
- See Also:
- Constant Field Values
-
DEVELOPER_EXTENSION_REMOVED
static final java.lang.String DEVELOPER_EXTENSION_REMOVED
- See Also:
- Constant Field Values
-
DIRECT_OBJECT
static final java.lang.String DIRECT_OBJECT
- See Also:
- Constant Field Values
-
DOCUMENT_WITHOUT_SIGNATURES
static final java.lang.String DOCUMENT_WITHOUT_SIGNATURES
- See Also:
- Constant Field Values
-
DSS_REMOVED
static final java.lang.String DSS_REMOVED
- See Also:
- Constant Field Values
-
EXTENSIONS_REMOVED
static final java.lang.String EXTENSIONS_REMOVED
- See Also:
- Constant Field Values
-
EXTENSIONS_TYPE
static final java.lang.String EXTENSIONS_TYPE
- See Also:
- Constant Field Values
-
EXTENSION_LEVEL_DECREASED
static final java.lang.String EXTENSION_LEVEL_DECREASED
- See Also:
- Constant Field Values
-
FIELD_NOT_DICTIONARY
static final java.lang.String FIELD_NOT_DICTIONARY
- See Also:
- Constant Field Values
-
FIELD_REMOVED
static final java.lang.String FIELD_REMOVED
- See Also:
- Constant Field Values
-
LOCKED_FIELD_KIDS_ADDED
static final java.lang.String LOCKED_FIELD_KIDS_ADDED
- See Also:
- Constant Field Values
-
LOCKED_FIELD_KIDS_REMOVED
static final java.lang.String LOCKED_FIELD_KIDS_REMOVED
- See Also:
- Constant Field Values
-
LOCKED_FIELD_MODIFIED
static final java.lang.String LOCKED_FIELD_MODIFIED
- See Also:
- Constant Field Values
-
LOCKED_FIELD_REMOVED
static final java.lang.String LOCKED_FIELD_REMOVED
- See Also:
- Constant Field Values
-
NOT_ALLOWED_ACROFORM_CHANGES
static final java.lang.String NOT_ALLOWED_ACROFORM_CHANGES
- See Also:
- Constant Field Values
-
NOT_ALLOWED_CATALOG_CHANGES
static final java.lang.String NOT_ALLOWED_CATALOG_CHANGES
- See Also:
- Constant Field Values
-
NOT_ALLOWED_CERTIFICATION_SIGNATURE
static final java.lang.String NOT_ALLOWED_CERTIFICATION_SIGNATURE
- See Also:
- Constant Field Values
-
OBJECT_REMOVED
static final java.lang.String OBJECT_REMOVED
- See Also:
- Constant Field Values
-
PAGES_MODIFIED
static final java.lang.String PAGES_MODIFIED
- See Also:
- Constant Field Values
-
PAGE_ANNOTATIONS_MODIFIED
static final java.lang.String PAGE_ANNOTATIONS_MODIFIED
- See Also:
- Constant Field Values
-
PAGE_MODIFIED
static final java.lang.String PAGE_MODIFIED
- See Also:
- Constant Field Values
-
TABS_MODIFIED
static final java.lang.String TABS_MODIFIED
- See Also:
- Constant Field Values
-
PERMISSIONS_REMOVED
static final java.lang.String PERMISSIONS_REMOVED
- See Also:
- Constant Field Values
-
PERMISSIONS_TYPE
static final java.lang.String PERMISSIONS_TYPE
- See Also:
- Constant Field Values
-
PERMISSION_REMOVED
static final java.lang.String PERMISSION_REMOVED
- See Also:
- Constant Field Values
-
REFERENCE_REMOVED
static final java.lang.String REFERENCE_REMOVED
- See Also:
- Constant Field Values
-
REVISIONS_READING_EXCEPTION
static final java.lang.String REVISIONS_READING_EXCEPTION
- See Also:
- Constant Field Values
-
REVISIONS_RETRIEVAL_FAILED
static final java.lang.String REVISIONS_RETRIEVAL_FAILED
- See Also:
- Constant Field Values
-
REVISIONS_RETRIEVAL_FAILED_UNEXPECTEDLY
static final java.lang.String REVISIONS_RETRIEVAL_FAILED_UNEXPECTEDLY
- See Also:
- Constant Field Values
-
SIGNATURE_MODIFIED
static final java.lang.String SIGNATURE_MODIFIED
- See Also:
- Constant Field Values
-
SIGNATURE_REVISION_NOT_FOUND
static final java.lang.String SIGNATURE_REVISION_NOT_FOUND
- See Also:
- Constant Field Values
-
STRUCT_TREE_CONTENT_MODIFIED
static final java.lang.String STRUCT_TREE_CONTENT_MODIFIED
- See Also:
- Constant Field Values
-
STRUCT_TREE_ELEMENT_MODIFIED
static final java.lang.String STRUCT_TREE_ELEMENT_MODIFIED
- See Also:
- Constant Field Values
-
STRUCT_TREE_ROOT_ADDED
static final java.lang.String STRUCT_TREE_ROOT_ADDED
- See Also:
- Constant Field Values
-
STRUCT_TREE_ROOT_MODIFIED
static final java.lang.String STRUCT_TREE_ROOT_MODIFIED
- See Also:
- Constant Field Values
-
STRUCT_TREE_ROOT_NOT_DICT
static final java.lang.String STRUCT_TREE_ROOT_NOT_DICT
- See Also:
- Constant Field Values
-
STRUCT_TREE_ROOT_REMOVED
static final java.lang.String STRUCT_TREE_ROOT_REMOVED
- See Also:
- Constant Field Values
-
TOO_MANY_CERTIFICATION_SIGNATURES
static final java.lang.String TOO_MANY_CERTIFICATION_SIGNATURES
- See Also:
- Constant Field Values
-
UNEXPECTED_ENTRY_IN_XREF
static final java.lang.String UNEXPECTED_ENTRY_IN_XREF
- See Also:
- Constant Field Values
-
UNEXPECTED_FORM_FIELD
static final java.lang.String UNEXPECTED_FORM_FIELD
- See Also:
- Constant Field Values
-
UNKNOWN_ACCESS_PERMISSIONS
static final java.lang.String UNKNOWN_ACCESS_PERMISSIONS
- See Also:
- Constant Field Values
-
UNRECOGNIZED_ACTION
static final java.lang.String UNRECOGNIZED_ACTION
- See Also:
- Constant Field Values
-
EPS
private static final float EPS
- See Also:
- Constant Field Values
-
DUMMY_STRUCT_TREE_ELEMENT
private static final PdfDictionary DUMMY_STRUCT_TREE_ELEMENT
-
lockedFields
private final java.util.Set<java.lang.String> lockedFields
-
properties
private final SignatureValidationProperties properties
-
metaInfo
private IMetaInfo metaInfo
-
accessPermissions
private AccessPermissions accessPermissions
-
requestedAccessPermissions
private AccessPermissions requestedAccessPermissions
-
unexpectedXrefChangesStatus
private ReportItem.ReportItemStatus unexpectedXrefChangesStatus
-
checkedAnnots
private java.util.Set<PdfObject> checkedAnnots
-
newlyAddedFields
private java.util.Set<PdfDictionary> newlyAddedFields
-
removedTaggedObjects
private java.util.Set<PdfDictionary> removedTaggedObjects
-
addedTaggedObjects
private java.util.Set<PdfDictionary> addedTaggedObjects
-
usuallyModifiedObjects
private Tuple2<java.util.Set<PdfIndirectReference>,java.util.Set<PdfIndirectReference>> usuallyModifiedObjects
-
-
Constructor Detail
-
DocumentRevisionsValidator
protected DocumentRevisionsValidator(ValidatorChainBuilder chainBuilder)
Creates new instance ofDocumentRevisionsValidator
.- Parameters:
chainBuilder
- SeeValidatorChainBuilder
-
-
Method Detail
-
setEventCountingMetaInfo
public DocumentRevisionsValidator setEventCountingMetaInfo(IMetaInfo metaInfo)
Sets theIMetaInfo
that will be used during newPdfDocument
creations.- Parameters:
metaInfo
- meta info to set- Returns:
- the same
DocumentRevisionsValidator
instance.
-
setAccessPermissions
public DocumentRevisionsValidator setAccessPermissions(AccessPermissions accessPermissions)
Set access permissions to be used during docMDP validation. If value is provided, access permission related signature parameters will be ignored during the validation.- Parameters:
accessPermissions
-AccessPermissions
docMDP validation level- Returns:
- the same
DocumentRevisionsValidator
instance.
-
setUnexpectedXrefChangesStatus
public DocumentRevisionsValidator setUnexpectedXrefChangesStatus(ReportItem.ReportItemStatus status)
Set the status to be used for the report items produced during docMDP validation in case revision contains unexpected changes in the XREF table. Default value isReportItem.ReportItemStatus.INFO
.- Parameters:
status
-ReportItem.ReportItemStatus
to be used in case of unexpected changes in the XREF table- Returns:
- the same
DocumentRevisionsValidator
instance.
-
validateAllDocumentRevisions
public ValidationReport validateAllDocumentRevisions(ValidationContext context, PdfDocument document)
Validate all document revisions according to docMDP and fieldMDP transform methods.- Parameters:
context
- the validation context in which to validate document revisionsdocument
- the document to be validated- Returns:
ValidationReport
which contains detailed validation results.
-
validateAllDocumentRevisions
ValidationReport validateAllDocumentRevisions(ValidationContext context, PdfDocument document, java.lang.String signatureName)
Validate all document revisions according to docMDP and fieldMDP transform methods and collect validation report related to the single signature field checks if specified.- Parameters:
context
- the validation context in which to validate document revisionsdocument
- the document to be validatedsignatureName
- signature field to collect validation result for. If null, all signatures will be checked- Returns:
ValidationReport
which contains detailed validation results.
-
validateRevision
void validateRevision(DocumentRevision previousRevision, DocumentRevision currentRevision, PdfDocument originalDocument, ValidationReport validationReport, ValidationContext context)
-
mergeRevisionsInLinearizedDocument
private void mergeRevisionsInLinearizedDocument(PdfDocument document, java.util.List<DocumentRevision> documentRevisions)
-
validateRevision
private boolean validateRevision(ValidationReport validationReport, ValidationContext context, PdfDocument documentWithoutRevision, PdfDocument documentWithRevision, DocumentRevision currentRevision)
-
getAccessPermissions
AccessPermissions getAccessPermissions()
-
createInputStreamFromRevision
private static java.io.InputStream createInputStreamFromRevision(PdfDocument originalDocument, DocumentRevision revision)
-
isLinearizedPdf
private static boolean isLinearizedPdf(PdfDocument originalDocument)
-
isStructTreeElement
private static boolean isStructTreeElement(PdfObject object)
-
getObjectFromStructTreeContent
private static PdfObject getObjectFromStructTreeContent(PdfObject structTreeContent)
-
stopValidation
private boolean stopValidation(ValidationReport result, ValidationContext validationContext)
-
updateApprovalSignatureAccessPermissions
private void updateApprovalSignatureAccessPermissions(PdfDictionary signatureField, ValidationReport report)
-
updateApprovalSignatureFieldLock
private void updateApprovalSignatureFieldLock(DocumentRevision revision, PdfDictionary signatureField, PdfDocument document, ValidationReport report)
-
lockAllFormFields
private void lockAllFormFields(DocumentRevision revision, java.util.List<java.lang.String> excludedFields, PdfDocument originalDocument, ValidationReport report)
-
updateCertificationSignatureAccessPermissions
private void updateCertificationSignatureAccessPermissions(PdfSignature signature, ValidationReport report)
-
isCertificationSignature
private boolean isCertificationSignature(PdfSignature signature)
-
revisionContainsSignature
private boolean revisionContainsSignature(DocumentRevision revision, java.lang.String signature, PdfDocument originalDocument, ValidationReport report)
-
createDocumentAndPerformOperation
private boolean createDocumentAndPerformOperation(DocumentRevision revision, PdfDocument originalDocument, ValidationReport report, java.util.function.Function<PdfDocument,java.lang.Boolean> operation)
-
resetClassFields
private void resetClassFields()
-
compareCatalogs
private boolean compareCatalogs(PdfDocument documentWithoutRevision, PdfDocument documentWithRevision, ValidationReport report, ValidationContext context)
-
compareStructTreeRoot
private boolean compareStructTreeRoot(PdfObject previousStructTreeRoot, PdfObject currentStructTreeRoot, ValidationReport report)
-
compareStructTreeElementKids
private boolean compareStructTreeElementKids(PdfDictionary previousStructElement, PdfDictionary currentStructElement, ValidationReport report)
-
compareStructTreeElements
private boolean compareStructTreeElements(PdfDictionary previousStructElement, PdfDictionary currentStructElement, ValidationReport report)
-
compareStructTreeContents
private boolean compareStructTreeContents(PdfObject previousStructTreeContent, PdfObject currentStructTreeContent, ValidationReport report)
-
compareExtensions
private boolean compareExtensions(PdfObject previousExtensions, PdfObject currentExtensions, ValidationReport report)
-
comparePermissions
private boolean comparePermissions(PdfObject previousPerms, PdfObject currentPerms, ValidationReport report)
-
compareDss
private boolean compareDss(PdfObject previousDss, PdfObject currentDss, ValidationReport report)
-
compareAcroFormsWithFieldMDP
private boolean compareAcroFormsWithFieldMDP(PdfDocument documentWithoutRevision, PdfDocument documentWithRevision, ValidationReport report)
-
compareFormFieldWithFieldMDP
private boolean compareFormFieldWithFieldMDP(PdfDictionary previousField, PdfDictionary currentField, java.lang.String fieldName, ValidationReport report)
-
compareAcroForms
private boolean compareAcroForms(PdfDictionary prevAcroForm, PdfDictionary currAcroForm, ValidationReport report)
-
compareFormFields
private boolean compareFormFields(PdfArray prevFields, PdfArray currFields, ValidationReport report)
-
retrieveTheSameField
private PdfDictionary retrieveTheSameField(java.util.Set<PdfDictionary> currFields, PdfDictionary previousField)
-
compareFields
private boolean compareFields(PdfDictionary previousField, PdfDictionary currentField, ValidationReport report)
DocMDP level >= 2 allows setting values of the fields and accordingly update the widget appearances of them. But you cannot change the form structure, so it is not allowed to add, remove or rename fields, change most of their properties.- Parameters:
previousField
- field from the previous revision to checkcurrentField
- field from the current revision to checkreport
- validation report- Returns:
true
if the changes of the field are allowed,false
otherwise.
-
compareSignatureDictionaries
private boolean compareSignatureDictionaries(PdfObject prevSigDict, PdfObject curSigDict, ValidationReport report)
-
compareSignatureReferenceDictionaries
private boolean compareSignatureReferenceDictionaries(PdfArray previousReferences, PdfArray currentReferences, ValidationReport report)
-
compareWidgets
private boolean compareWidgets(PdfArray prevFields, PdfArray currFields, ValidationReport report)
-
comparePages
private boolean comparePages(PdfDictionary prevPages, PdfDictionary currPages, ValidationReport report)
-
collectRemovedAndAddedAnnotations
private void collectRemovedAndAddedAnnotations(PdfArray previousAnnotations, PdfArray currentAnnotations)
-
comparePageAnnotations
private boolean comparePageAnnotations(PdfArray prevAnnots, PdfArray currAnnots, ValidationReport report)
-
comparePageAnnotations
private boolean comparePageAnnotations(PdfDictionary prevAnnot, PdfDictionary currAnnot, ValidationReport report)
-
compareIndirectReferencesObjNums
private boolean compareIndirectReferencesObjNums(PdfObject prevObj, PdfObject currObj, ValidationReport report, java.lang.String type)
-
isAllowedSignatureField
private boolean isAllowedSignatureField(PdfDictionary field, ValidationReport report)
DocMDP level <=2 allows adding new fields in the following cases: docMDP level 1: allows adding only DocTimeStamp signature fields; docMDP level 2: same as level 1 and also adding and then signing signature fields, so signature dictionary shouldn't be null.- Parameters:
field
- newly added field entryreport
- validation report- Returns:
- true if newly added field is allowed to be added, false otherwise.
-
populateFormFields
private java.util.Set<PdfDictionary> populateFormFields(PdfArray fieldsArray)
-
populateWidgetAnnotations
private java.util.List<PdfDictionary> populateWidgetAnnotations(PdfArray fieldsArray)
-
getAnnotsNotAllowedToBeModified
private PdfArray getAnnotsNotAllowedToBeModified(PdfDictionary page)
-
copyCatalogEntriesToCompare
private PdfDictionary copyCatalogEntriesToCompare(PdfDictionary catalog)
-
copyAcroformDictionary
private PdfDictionary copyAcroformDictionary(PdfDictionary acroForm)
-
copyFieldDictionary
private PdfDictionary copyFieldDictionary(PdfDictionary field)
-
removeAppearanceRelatedProperties
private void removeAppearanceRelatedProperties(PdfDictionary annotDict)
-
comparePdfObjects
private static boolean comparePdfObjects(PdfObject pdfObject1, PdfObject pdfObject2, Tuple2<java.util.Set<PdfIndirectReference>,java.util.Set<PdfIndirectReference>> usuallyModifiedObjects)
-
comparePdfObjects
private static boolean comparePdfObjects(PdfObject pdfObject1, PdfObject pdfObject2, java.util.List<Tuple2<PdfObject,PdfObject>> visitedObjects, Tuple2<java.util.Set<PdfIndirectReference>,java.util.Set<PdfIndirectReference>> usuallyModifiedObjects)
-
comparePdfArrays
private static boolean comparePdfArrays(PdfArray array1, PdfArray array2, java.util.List<Tuple2<PdfObject,PdfObject>> visitedObjects, Tuple2<java.util.Set<PdfIndirectReference>,java.util.Set<PdfIndirectReference>> usuallyModifiedObjects)
-
comparePdfDictionaries
private static boolean comparePdfDictionaries(PdfDictionary dictionary1, PdfDictionary dictionary2, java.util.List<Tuple2<PdfObject,PdfObject>> visitedObjects, Tuple2<java.util.Set<PdfIndirectReference>,java.util.Set<PdfIndirectReference>> usuallyModifiedObjects)
-
comparePdfStreams
private static boolean comparePdfStreams(PdfStream stream1, PdfStream stream2, java.util.List<Tuple2<PdfObject,PdfObject>> visitedObjects, Tuple2<java.util.Set<PdfIndirectReference>,java.util.Set<PdfIndirectReference>> usuallyModifiedObjects)
-
isSameReference
private static boolean isSameReference(PdfIndirectReference indirectReference1, PdfIndirectReference indirectReference2)
-
isMaxGenerationObject
private static boolean isMaxGenerationObject(PdfIndirectReference indirectReference)
-
createUsuallyModifiedObjectsSet
private java.util.Set<PdfIndirectReference> createUsuallyModifiedObjectsSet(PdfDocument document)
-
addStructTreeElementsToSet
private void addStructTreeElementsToSet(PdfObject structTreeRootKids, java.util.Set<PdfIndirectReference> set)
-
addStructTreeElementsToSet
private void addStructTreeElementsToSet(PdfArray structTreeRootKids, java.util.Set<PdfIndirectReference> set)
-
addPageEntriesToSet
private void addPageEntriesToSet(PdfDictionary page, java.util.Set<PdfIndirectReference> set)
-
createAllowedReferences
private java.util.Set<PdfIndirectReference> createAllowedReferences(PdfDocument document)
-
checkAllowedReferences
private boolean checkAllowedReferences(java.util.Set<PdfIndirectReference> currentAllowedReferences, java.util.Set<PdfIndirectReference> previousAllowedReferences, PdfIndirectReference indirectReference, PdfDocument documentWithoutRevision)
-
isAllowedStreamObj
private boolean isAllowedStreamObj(PdfIndirectReference indirectReference, PdfDocument document)
-
createAllowedDssEntries
private java.util.Set<PdfIndirectReference> createAllowedDssEntries(PdfDocument document)
-
createAllowedStructTreeRootEntries
private java.util.Set<PdfIndirectReference> createAllowedStructTreeRootEntries(PdfDictionary structTreeRoot)
-
createAllowedTreeEntries
private void createAllowedTreeEntries(PdfObject treeNode, java.util.Set<PdfIndirectReference> allowedReferences, PdfName contentName)
-
createAllowedStructTreeRootKidsEntries
private void createAllowedStructTreeRootKidsEntries(PdfObject structTreeRootKids, java.util.Set<PdfIndirectReference> allowedReferences)
-
createAllowedStructTreeRootKidsEntries
private void createAllowedStructTreeRootKidsEntries(PdfArray structTreeRootKids, java.util.Set<PdfIndirectReference> allowedReferences)
-
createAllowedPagesEntries
private java.util.Collection<PdfIndirectReference> createAllowedPagesEntries(PdfDictionary pagesDictionary)
-
createAllowedFormFieldEntries
private void createAllowedFormFieldEntries(PdfArray fields, java.util.Set<PdfIndirectReference> allowedReferences)
-
addWidgetAnnotation
private void addWidgetAnnotation(java.util.Set<PdfIndirectReference> allowedReferences, PdfDictionary annotDict)
-
addAllNestedDictionaryEntries
private void addAllNestedDictionaryEntries(java.util.Set<PdfIndirectReference> allowedReferences, PdfDictionary dictionary)
-
addAllNestedArrayEntries
private void addAllNestedArrayEntries(java.util.Set<PdfIndirectReference> allowedReferences, PdfArray pdfArray)
-
-