Время от времени мы хотим снять защиту от записи/«шифрование» и цифровые подписи с наших 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
Программисты JAVA общаются здесь
1728151676
Anonymous
Время от времени мы хотим снять защиту от записи/«шифрование» и цифровые подписи с наших 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;
}
}
}
[b]Вопрос:[/b] Какой эквивалентный код позволяет сделать это с помощью 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();
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79055588/how-to-remove-the-read-only-mode-and-signatures-of-a-digitally-signed-pdf-with-p[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия