Как получить идентификаторы "оригинальные" и "модифицированные" для 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()));
}
}