Как объединять PDF-файлы без потери цифровой подписи с помощью Java (IText API) - PullRequest
0 голосов
/ 22 октября 2018

У меня есть документ PDF с цифровой подписью, я хочу прикрепить этот PDF-файл с цифровой подписью к другому обычному PDF-файлу с помощью Java Java Itext API, это возможно?Я пытался прикрепить PDF, который содержит цифровую подпись с другой.Я могу объединить PDF-файлы, но окончательный PDF-файл не сохраняет цифровую подпись в выходной PDF-файл.Возможно ли это?

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

Как уже говорили другие, идея (по крайней мере, основная часть идеи) подписания заключается в том, чтобы убедиться, что документ не изменился.Слияние, с другой стороны, меняет документ.Таким образом, объединение приведет к повреждению подписей.

Однако другой подход заключается в том, чтобы сделать другой «нормальный» PDF переносимой коллекцией (особый вид PDF с вложениями) и прикрепить подписанный PDF к этой коллекции..

При открытии подписанного PDF из коллекции подпись будет не повреждена, как в оригинальном подписанном PDF.

Пример кода для создания переносной коллекции

Вы можетеНайдите пример создания портативной коллекции на сайте iText:

public static final String DEST = "results/collections/portable_collection.pdf";
public static final String DATA = "resources/data/united_states.csv";
public static final String HELLO = "resources/pdfs/hello.pdf";
public static final String IMG = "resources/images/berlin2013.jpg";

public void createPdf(String dest) throws IOException, DocumentException {
    Document document = new Document();
    PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(dest));
    document.open();
    document.add(new Paragraph("Portable collection"));
    PdfCollection collection = new PdfCollection(PdfCollection.TILE);
    writer.setCollection(collection);
    PdfFileSpecification fileSpec = PdfFileSpecification.fileEmbedded(
            writer, DATA, "united_states.csv", null);
    writer.addFileAttachment("united_states.csv", fileSpec);
    fileSpec = PdfFileSpecification.fileEmbedded(
            writer, HELLO, "hello.pdf", null);
    writer.addFileAttachment("hello.pdf", fileSpec);
    fileSpec = PdfFileSpecification.fileEmbedded(
            writer, IMG, "berlin2013.jpg", null);
    writer.addFileAttachment("berlin2013.jpg", fileSpec);
    document.close();
}

( здесь на веб-сайте, здесь в их github)

Результат выполнения этого примера: здесь .

(Поскольку вы использовали тег itext, а не itext7, я предполагаю, что вы используете версию iText5.5.x.)

0 голосов
/ 22 октября 2018

Это невозможно, эта цифровая подпись специально разработана для защиты оригинального документа от любых изменений.

Чтобы эти два документа были объединены и подписаны, вам необходимо знать используемые ключидля подписи и сгенерируйте подпись еще раз для нового объединенного документа.

...