Время от времени мы хотим снять защиту от записи/«шифрование» и цифровые подписи с наших PDF-документов, чтобы документ можно было изменить и повторно подписать. Например. поскольку исходный документ отсутствует или был изменен, а цифровые подписи повреждены (например, этот документ).
Для этого мы использовали следующий код iText 8 (действительно, выравнивание AcroForm не является лучший способ, например, потому что интерактивные формы становятся отключенными и т. д.):
public static byte[] cleanUpPdfItext(byte[] originalPdfData) throws Exception {
// Read the PDF document
try (
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
PdfReader pdfReader = new PdfReader(new ByteArrayInputStream(originalPdfData)).setUnethicalReading(true);
PdfWriter pdfWriter = new PdfWriter(byteArrayOutputStream);
PdfDocument pdfDocument = new PdfDocument(pdfReader, pdfWriter)
) {
// Create the signature utils
SignatureUtil signatureUtil = new SignatureUtil(pdfDocument);
// Check if encrypted and/or contains signatures
boolean isEncrypted = pdfReader.isEncrypted();
boolean hasSignatures = !signatureUtil.getSignatureNames().isEmpty();
// Handle all cases
if (isEncrypted && hasSignatures) { // Encrypted and signatures
// Remove the signatures
PdfAcroForm form = PdfAcroForm.getAcroForm(pdfDocument, true);
form.flattenFields();
// Write the changes to the output stream, so we can read them
pdfDocument.close();
// Get the manipulated document
return byteArrayOutputStream.toByteArray();
} else if (isEncrypted) { // Encrypted but no signatures
// Write the changes to the output stream, so we can read them
pdfDocument.close();
// Get the manipulated document
return byteArrayOutputStream.toByteArray();
} else { // Not encrypted/no signatures
// Return the original document data
return originalPdfData;
}
}
}
Вопрос: Какой эквивалентный код позволяет сделать это с помощью pdfbox? Удалить защиту от записи/"шифрование" и удалить все существующие подписи (пока отсутствуют), чтобы документ можно было редактировать и подписывать?
Я придумал эту первоначальную версию:
public static byte[] cleanUpPdfbox(byte[] original) throws Exception {
try (
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
PDDocument pdDocument = Loader.loadPDF(original)
) {
// Check if encrypted or read only
AccessPermission accessPermission = pdDocument.getCurrentAccessPermission();
boolean isEncrypted = pdDocument.isEncrypted() || accessPermission.isReadOnly();
// Check if signatures exist
boolean hasSignatures = false;
PDAcroForm pdAcroForm = pdDocument.getDocumentCatalog().getAcroForm();
if (pdAcroForm != null) {
// Get a list of all signature fields
List pdSignatures = pdDocument.getSignatureDictionaries();
hasSignatures = !pdSignatures.isEmpty();
}
// Remove all security if required
if (isEncrypted) {
pdDocument.setAllSecurityToBeRemoved(true);
}
// Remove all signatures
if (hasSignatures) {
// TODO: Code in question
}
// Write the document
pdDocument.save(byteArrayOutputStream);
return byteArrayOutputStream.toByteArray();
}
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... pdf-with-p
Как удалить режим только для чтения и подписи PDF-файла с цифровой подписью с помощью pdfbox ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как удалить режим только для чтения и подписи PDF-файла с цифровой подписью с помощью pdfbox
Anonymous » » в форуме JAVA - 0 Ответы
- 13 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как удалить режим только для чтения и подписи PDF-файла с цифровой подписью с помощью pdfbox
Anonymous » » в форуме JAVA - 0 Ответы
- 12 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как удалить режим только для чтения и подписи PDF-файла с цифровой подписью с помощью pdfbox
Anonymous » » в форуме JAVA - 0 Ответы
- 14 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как удалить режим только для чтения и подписи PDF-файла с цифровой подписью с помощью pdfbox
Anonymous » » в форуме JAVA - 0 Ответы
- 16 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как удалить режим только для чтения и подписи PDF-файла с цифровой подписью с помощью pdfbox
Anonymous » » в форуме JAVA - 0 Ответы
- 5 Просмотры
-
Последнее сообщение Anonymous
-