Как получить идентификаторы "оригинальные" и "модифицированные" для XFDF с помощью iText?

Последний тег в файле XFDF выглядит примерно так:

<ids original="20639838865717E80D2556CB7B2AEC2D" 
     modified="754C78B10C9159419708446C3395CDBE"/>

Я могу получить эти значения, экспортировав данные PDF-формы из Acrobat, используя этот метод: http://wiki.developerforce.com/page/Adobe_XFDF_Ids_Determination.

Однако я хочу получить идентификаторы программно для создания правильных документов xfdf для произвольных форм PDF.

Как получить эти значения с помощью iText?

1 ответ

Решение

Как объясняется в этом посте ( удаление PDFID в PDF) / ID является рекомендуемой записью в "словаре трейлера" (и обязательна, если AcroForm зашифрован).

Используя iText, идентификаторы доступны как PdfArray из двух PdfString объекты в трейлере PdfDictionary, Значения String будут выглядеть как мусор, потому что каждое из них является представлением байтового массива. Это шестнадцатеричные значения, которые вам нужны для "оригинала" и "изменения".

Следующий код распечатает два идентификатора, которые можно проверить, например, по экспорту из Acrobat Pro (примечание Hex.encodeHexString такое Apache commons-codec):

public void printIds(PdfReader reader) {
    PdfDictionary trailer = reader.getTrailer();
    if (trailer.contains(PdfName.ID)) {
        PdfArray ids = (PdfArray) trailer.get(PdfName.ID);
        PdfString original = ids.getAsString(0);
        PdfString modified = ids.getAsString(1);
        System.out.println(Hex.encodeHexString(original.getBytes()));
        System.out.println(Hex.encodeHexString(modified.getBytes()));
    }
}
Другие вопросы по тегам