HPDFWriteHeadlessSignatureReservation

Необязательные значения THPDFHeadlessSignatureMetadata становятся записями Reason, Location, ContactInfo и Name в Unicode; тот же StringEncoder применяется и к именам блокировок полей, и к метаданным до записи любых байтов

function HPDFWriteHeadlessSignatureReservation(Target: TStream;
  ObjectNumber, Generation, ReservedCMSBytes, MaxObjectBytes: Integer;
  CAdES: Boolean = False; CertificationPermission: Integer = 0;
  CatalogObjectNumber: Integer = 0; CatalogGeneration: Integer = 0;
  FieldLock: PHPDFHeadlessFieldLock = nil;
  StringEncoder: THPDFHeadlessPolicyStringEncoder = nil;
  StringEncoderContext: Pointer = nil;
  Metadata: PHPDFHeadlessSignatureMetadata = nil;
  DocumentTimestamp: Boolean = False): THPDFHeadlessSignatureReservation;

Пишет настоящий косвенный словарь подписи с фиксированными числовыми слотами ByteRange и заполненной нулями шестнадцатеричной резервацией Contents

Выходной поток принадлежит вызывающему, который должен передать положительный номер объекта, поколение от 0 до 65535, положительную DER-резервацию и бюджет байтов объекта

Функция проверяет полный размер словаря до записи или выделения резервации и заполняет её шестнадцатеричную полезную нагрузку ограниченными порциями

Задайте CAdES=true для ETSI.CAdES.detached; по умолчанию пишется adbe.pkcs7.detached

Передайте корректную ссылку Catalog и право сертификации от 1 до 3, чтобы выпустить трансформацию DocMDP; необязательная блокировка поля выпускает свою настоящую трансформацию FieldMDP в том же массиве Reference

Имена блокировок полей валидируются и кодируются как PDF-строки UTF-16BE до записи резервации; шифрующие низкоуровневые вызывающие передают callback StringEncoder, который получает байты открытого текста и возвращает байты зашифрованной строки

Callback выполняется до записи любых байтов резервации, а закодированное расширение учитывается в бюджете объекта; THPDFHeadlessDocument автоматически передаёт аутентифицированный контекст шифрования документа

Зарегистрируйте возвращённое смещение объекта в общем xref-писателе, подключите объект к полю подписи и завершите trailer PDF до вызова HPDFFinalizeHeadlessSignatureReservation

Низкоуровневые вызывающие сами отвечают за staging и публикацию; THPDFHeadlessDocument.SignToFile даёт защиту источника, сохранение шифрования, бюджеты и атомарную публикацию файла

DocumentTimestamp=true пишет DocTimeStamp/ETSI.RFC3161 вместо approve-профиля и запрещает ссылки на трансформации сертификации или блокировки полей; завершайте его через HPDFFinalizeHeadlessDocumentTimestampReservation