Как использовать настоящую метку времени подписи в пользовательском тексте слоя 2 при создании подписей в itextpdf

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

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

1 ответ

Решение

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

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

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

Это свойство имеет публичный геттер и публичный сеттер

/**
 * 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)

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

Другие вопросы по тегам