SigUtils.java (pdfbox-2.0.23-src) | : | SigUtils.java (pdfbox-2.0.24-src) | ||
---|---|---|---|---|
skipping to change at line 92 | skipping to change at line 92 | |||
public static int getMDPPermission(PDDocument doc) | public static int getMDPPermission(PDDocument doc) | |||
{ | { | |||
COSBase base = doc.getDocumentCatalog().getCOSObject().getDictionaryObje ct(COSName.PERMS); | COSBase base = doc.getDocumentCatalog().getCOSObject().getDictionaryObje ct(COSName.PERMS); | |||
if (base instanceof COSDictionary) | if (base instanceof COSDictionary) | |||
{ | { | |||
COSDictionary permsDict = (COSDictionary) base; | COSDictionary permsDict = (COSDictionary) base; | |||
base = permsDict.getDictionaryObject(COSName.DOCMDP); | base = permsDict.getDictionaryObject(COSName.DOCMDP); | |||
if (base instanceof COSDictionary) | if (base instanceof COSDictionary) | |||
{ | { | |||
COSDictionary signatureDict = (COSDictionary) base; | COSDictionary signatureDict = (COSDictionary) base; | |||
base = signatureDict.getDictionaryObject("Reference"); | base = signatureDict.getDictionaryObject(COSName.REFERENCE); | |||
if (base instanceof COSArray) | if (base instanceof COSArray) | |||
{ | { | |||
COSArray refArray = (COSArray) base; | COSArray refArray = (COSArray) base; | |||
for (int i = 0; i < refArray.size(); ++i) | for (int i = 0; i < refArray.size(); ++i) | |||
{ | { | |||
base = refArray.getObject(i); | base = refArray.getObject(i); | |||
if (base instanceof COSDictionary) | if (base instanceof COSDictionary) | |||
{ | { | |||
COSDictionary sigRefDict = (COSDictionary) base; | COSDictionary sigRefDict = (COSDictionary) base; | |||
if (COSName.DOCMDP.equals(sigRefDict.getDictionaryOb ject("TransformMethod"))) | if (COSName.DOCMDP.equals(sigRefDict.getDictionaryOb ject(COSName.TRANSFORM_METHOD))) | |||
{ | { | |||
base = sigRefDict.getDictionaryObject("Transform Params"); | base = sigRefDict.getDictionaryObject(COSName.TR ANSFORM_PARAMS); | |||
if (base instanceof COSDictionary) | if (base instanceof COSDictionary) | |||
{ | { | |||
COSDictionary transformDict = (COSDictionary ) base; | COSDictionary transformDict = (COSDictionary ) base; | |||
int accessPermissions = transformDict.getInt (COSName.P, 2); | int accessPermissions = transformDict.getInt (COSName.P, 2); | |||
if (accessPermissions < 1 || accessPermissio ns > 3) | if (accessPermissions < 1 || accessPermissio ns > 3) | |||
{ | { | |||
accessPermissions = 2; | accessPermissions = 2; | |||
} | } | |||
return accessPermissions; | return accessPermissions; | |||
} | } | |||
skipping to change at line 156 | skipping to change at line 156 | |||
if (sig.getCOSObject().containsKey(COSName.CONTENTS)) | if (sig.getCOSObject().containsKey(COSName.CONTENTS)) | |||
{ | { | |||
throw new IOException("DocMDP transform method not allowed if an approval signature exists"); | throw new IOException("DocMDP transform method not allowed if an approval signature exists"); | |||
} | } | |||
} | } | |||
COSDictionary sigDict = signature.getCOSObject(); | COSDictionary sigDict = signature.getCOSObject(); | |||
// DocMDP specific stuff | // DocMDP specific stuff | |||
COSDictionary transformParameters = new COSDictionary(); | COSDictionary transformParameters = new COSDictionary(); | |||
transformParameters.setItem(COSName.TYPE, COSName.getPDFName("TransformP arams")); | transformParameters.setItem(COSName.TYPE, COSName.TRANSFORM_PARAMS); | |||
transformParameters.setInt(COSName.P, accessPermissions); | transformParameters.setInt(COSName.P, accessPermissions); | |||
transformParameters.setName(COSName.V, "1.2"); | transformParameters.setName(COSName.V, "1.2"); | |||
transformParameters.setNeedToBeUpdated(true); | transformParameters.setNeedToBeUpdated(true); | |||
COSDictionary referenceDict = new COSDictionary(); | COSDictionary referenceDict = new COSDictionary(); | |||
referenceDict.setItem(COSName.TYPE, COSName.getPDFName("SigRef")); | referenceDict.setItem(COSName.TYPE, COSName.SIG_REF); | |||
referenceDict.setItem("TransformMethod", COSName.DOCMDP); | referenceDict.setItem(COSName.TRANSFORM_METHOD, COSName.DOCMDP); | |||
referenceDict.setItem("DigestMethod", COSName.getPDFName("SHA1")); | referenceDict.setItem(COSName.DIGEST_METHOD, COSName.getPDFName("SHA1")) | |||
referenceDict.setItem("TransformParams", transformParameters); | ; | |||
referenceDict.setItem(COSName.TRANSFORM_PARAMS, transformParameters); | ||||
referenceDict.setNeedToBeUpdated(true); | referenceDict.setNeedToBeUpdated(true); | |||
COSArray referenceArray = new COSArray(); | COSArray referenceArray = new COSArray(); | |||
referenceArray.add(referenceDict); | referenceArray.add(referenceDict); | |||
sigDict.setItem("Reference", referenceArray); | sigDict.setItem(COSName.REFERENCE, referenceArray); | |||
referenceArray.setNeedToBeUpdated(true); | referenceArray.setNeedToBeUpdated(true); | |||
// Catalog | // Catalog | |||
COSDictionary catalogDict = doc.getDocumentCatalog().getCOSObject(); | COSDictionary catalogDict = doc.getDocumentCatalog().getCOSObject(); | |||
COSDictionary permsDict = new COSDictionary(); | COSDictionary permsDict = new COSDictionary(); | |||
catalogDict.setItem(COSName.PERMS, permsDict); | catalogDict.setItem(COSName.PERMS, permsDict); | |||
permsDict.setItem(COSName.DOCMDP, signature); | permsDict.setItem(COSName.DOCMDP, signature); | |||
catalogDict.setNeedToBeUpdated(true); | catalogDict.setNeedToBeUpdated(true); | |||
permsDict.setNeedToBeUpdated(true); | permsDict.setNeedToBeUpdated(true); | |||
} | } | |||
End of changes. 6 change blocks. | ||||
9 lines changed or deleted | 10 lines changed or added |