Как всегда, используйте источник.
В этом случае я увидел возможность довольно быстро (кстати, источник Java):
public void close() throws DocumentException, IOException {
if (!hasSignature) {
stamper.close( moreInfo );
return;
}
Есть ли в этой форме какие-либо подписи?Давайте посмотрим, когда hasSignatures будет истинным.
Этого не может быть с вашим источником.hasSignatures устанавливается только тогда, когда вы подписываете PDF через PdfStamper.createSignature (...), так что это явно не так.?Это не будет в метаданных XMP.MoreInfo добавляется непосредственно в словарь Doc Info.Вы видите их на вкладке «Пользовательские» Acrobat (и, скорее всего, Reader, хотя в данный момент мне это не удобно).
Вы абсолютно уверены, что MoreInfo неNULL, и все его значения не являются NULL?
Словарь просто передается по ссылке, поэтому любые изменения (в другом потоке) будут отражены в PDF, как он был написан.
Правильный способ итерации по «информационному словарю документа»:
PdfReader reader = new PdfReader(somePath);
Map<String, String> info = reader.getInfo();
for (String key : info.keySet()) {
System.out.println( key + ": " + info.get(key) );
}
Обратите внимание, что при этом будут проходить все поля всловарь информации о документе, а не только пользовательские.Также имейте в виду, что изменения, внесенные Map
из getInfo()
, будут не перенесены в PDF.Карта обновлена, заполнена и возвращена.