Как использовать настоящую метку времени подписи в пользовательском тексте слоя 2 при создании подписей в itextpdf - PullRequest
0 голосов
/ 26 октября 2018

Я хочу создать внешний вид подписи, используя пользовательский текст и реальную временную метку подписи (как использовалось описание режима рендеринга) с методом появление.setLayer2Text (). Я прочитал книгу Цифровые подписи для документов PDF (особенно на страницах 40-48) и не смог найти способ сделать это. Режимы рендеринга представляют описание по умолчанию для использования метаданных, таких как имя, печать подписи, причина и так далее. Мне нужно только подписать отметку времени от него, а не иначе. Я видел несколько примеров использования new Date () в качестве времени подписи, устанавливающего текст слоя 2, но я этого не хочу. Я хочу использовать действительно метку времени подписи в setLayer2Text () с некоторым собственным текстом.

Заранее спасибо за любую помощь.

1 Ответ

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

Я не уверен, что четко понимаю ваш вопрос.

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

Между тем ваши комментарии указывают на то, что вы просто хотите использовать дату и время, также используемые 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)

Таким образом, вы можете получить время, чтобы использовать его здесь, и вы даже можете установить его самостоятельно!

...