Я хочу подписать PDF с помощью блокировки.Я использую PDFBox 2.0.9
Поток, которого я хочу достичь:
- Я создам документ с полем формы
- Я хочу подписатьдокумент, но исключить это поле формы
- После подписания этого документа я хочу изменить значение этого поля
- Я подпишу снова без исключения
Так что если кто-тоСнова отредактируйте это поле, Adobe Reader должен сказать, что этот документ изменился.
«Блокировка» словаря в поле подписи является причиной разрыва подписи после подписи
IВот пример кода и я написал его:
PDSignatureField signatureField = getSignatureField(pdDocument, pdSignature);
if (signatureField != null) {
COSDictionary lockDict = new COSDictionary();
lockDict.setItem(COSName.TYPE, COS_NAME_SIG_FIELD_LOCK);
lockDict.setItem(COS_NAME_ACTION, COS_NAME_EXCLUDE);
COSArray lockFields = new COSArray();
lockFields.add(new COSString("textbox1"));
lockDict.setItem(COS_NAME_FIELDS, lockFields);
signatureField.getCOSObject().setItem(COS_NAME_LOCK, lockDict);
COSDictionary transformParams = new COSDictionary(lockDict);
transformParams.setItem(COSName.TYPE, COSName.getPDFName("TransformParams"));
transformParams.setItem(COSName.V, COSName.getPDFName("1.2"));
transformParams.setDirect(true);
COSDictionary sigRef = new COSDictionary();
sigRef.setItem(COSName.TYPE, COSName.getPDFName("SigRef"));
sigRef.setItem(COSName.getPDFName("TransformParams"), transformParams);
sigRef.setItem(COSName.getPDFName("TransformMethod"), COSName.getPDFName("FieldMDP"));
//sigRef.setItem(COSName.getPDFName("Data"), pdDocument.getDocumentCatalog());
sigRef.setDirect(true);
COSArray referenceArray = new COSArray();
referenceArray.add(sigRef);
pdSignature.getCOSObject().setItem(COSName.getPDFName("Reference"), referenceArray);
}
Я могу подписать, изменить значение поля и снова подписать, и подписи в порядке.Проблема в том, что когда я изменяю значение поля после второй подписи, подписи остаются в силе.Я ожидаю, что после последнего изменения вторая подпись должна быть недействительной.