Я не уверен, что четко понимаю ваш вопрос.
Сначала вам показалось, что вы хотите иметь точную дату и время из метки времени цифровой подписи при визуализации этой подписи.Это невозможно, см. Первый раздел ниже.
Между тем ваши комментарии указывают на то, что вы просто хотите использовать дату и время, также используемые iText при создании текста слоя 2 и записи времени подписи в подписи,Это тривиально, см. Второй раздел ниже.
Дата и время из метки времени цифровой подписи
Это невозможно: визуализация подписи является аннотацией в PDF и поэтому является частьюподписанного контента.Таким образом, визуализация должна быть сгенерирована за до цифровой отметки времени.Следовательно, вы не можете прочитать время из отметки времени достаточно рано, чтобы поместить ее в вид подписи.
Конечно, вы можете попытаться быть как можно ближе к ней, например, сначала запросив цифровую отметку времени и сразу после этого построивпоявление с использованием этой отметки времени и подписывание с новой отметкой времени, но вы можете быть немного не в порядке.
Если ваш уровень сертификации подписи не запрещает это, вы также можете изменить внешний вид подписи после подписания в добавочном обновлении.В этом случае, однако, Adobe Reader будет предупреждать об изменениях после подписания ...
Дата и время, используемые iText при создании текста слоя 2 и подписи
С другой стороны, если вы просто хотитеиспользовать дату и время, также используемые iText при создании текста слоя 2 и записи времени подписи в подписи, решение тривиально: класс PdfSignatureAppearance
имеет свойство SignDate
:
/** Holds value of property signDate. */
private Calendar signDate;
инициализируется текущим временем в конструкторе PdfSignatureAppearance
:
/**
* Constructs a PdfSignatureAppearance object.
* @param writer the writer to which the signature will be written.
*/
PdfSignatureAppearance(PdfStamperImp writer) {
[...]
signDate = new GregorianCalendar();
[...]
}
Это дата и время, используемые iText при создании текста в getAppearance
:
if (layer2Text == null) {
StringBuilder buf = new StringBuilder();
buf.append("Digitally signed by ");
[...]
SimpleDateFormat sd = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss z");
buf.append("Date: ").append(sd.format(signDate.getTime()));
[...]
}
Это свойство имеетpublic getter и public setter
/**
* Gets the signature date.
* @return the signature date
*/
public java.util.Calendar getSignDate()
/**
* Sets the signature date.
* @param signDate the signature date
*/
public void setSignDate(java.util.Calendar signDate)
Таким образом, вы можете получить время, чтобы использовать его здесь, и вы даже можете установить его самостоятельно!