Проблема возникает, когда вторая сторона подписывает, мы загружаем документ в формате Adobe PDF и обнаруживаем, что первая подпись недействительна. -- Решено
Происходит новая проблема: подписание документа POST. Я использую утилиту PDFBOX PDF Merging Utility для объединения изображений в формате PDF с PDF-файлом с цифровой подписью, что делает подпись недействительной. Я понимаю, что это связано с MDPermission, что вам разрешено, а что нет.
Метод подписи: -
Код: Выделить всё
private byte[] fillAndSignFields(RecipientSignRequest.SignatureParams sigParams, Map formParams, byte[] sourcePdfData, Date signDate) throws IOException {
SignatureOptions signatureOptions = null;
try (PDDocument doc = Loader.loadPDF(sourcePdfData)) {
final ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
RecipientDocumentPDFPopulator pdfPopulator = new RecipientDocumentPDFPopulator();
pdfPopulator.populate(doc, formParams);
while (true) {
List signatures = PdfUtils.findUnfilledSignatureFieldsForRecipient(doc, sigParams.getSignatureFields());
if (signatures.isEmpty()) {
break;
}
int accessPermissions = SigUtils.getMDPPermission(doc);
log.error("Access Permission For Document {}", accessPermissions);
for (PDSignature signature : signatures) {
// Step 3: Set signature properties
signature.setFilter(PDSignature.FILTER_ADOBE_PPKLITE);
signature.setSubFilter(PDSignature.SUBFILTER_ADBE_PKCS7_DETACHED);
visibleSignatureProperties.buildSignature(); // Prepare visual signature
signature.setName(visibleSignatureProperties.getSignerName());
signature.setLocation(visibleSignatureProperties.getSignerLocation());
signature.setReason(visibleSignatureProperties.getSignatureReason());
Calendar calendar = Calendar.getInstance();
calendar.setTime(signDate);
signature.setSignDate(calendar);
// Step 4: Add visual signature to the document
signatureOptions = new SignatureOptions();
signatureOptions.setVisualSignature(visibleSignatureProperties.getVisibleSignature());
signatureOptions.setPage(visibleSignatureProperties.getPage() - 1);
doc.addSignature(signature, this, signatureOptions);
}
// Step 5: Save document incrementally to preserve previous changes
doc.saveIncremental(outputStream);
sourcePdfData = outputStream.toByteArray();
// If all signatures have been filled, break the loop
if (signatures.size()
Подробнее здесь: [url]https://stackoverflow.com/questions/79057231/pdf-box-2-0-32-3-0-2-issue-with-multi-party-signature-and-attachment-embedded[/url]