THotPDF.BeginIncrementalUpdate

THotPDF

 

Вверх  Методы  Далее

Загружает существующий PDF и переводит документ в режим инкрементального обновления с дозаписью

 

Синтаксис Delphi:

procedure BeginIncrementalUpdate(const SourceFile: TFileName); overload;

procedure BeginIncrementalUpdate(const SourceFile: TFileName; const Password: AnsiString); overload;

 

Синтаксис C++:

void __fastcall BeginIncrementalUpdate(System::Sysutils::TFileName SourceFile);

void __fastcall BeginIncrementalUpdate(System::Sysutils::TFileName SourceFile, const System::AnsiString Password);

 

Описание

Вызывайте BeginIncrementalUpdate, когда существующий PDF нужно расширить без перезаписи исходных байтов. HotPDF разбирает активный trailer или словарь xref stream, фиксирует его permanent и modification ID, удерживает файл-источник заблокированным на запись через file-backed stream и хранит лишь ограниченный хвостовой probe вместо полной копии источника

 

Новые непрямые объекты и изменения через API загруженного документа отслеживаются автоматически. Используйте MarkDirty когда код меняет объект в обход официальных хуков мутации

 

Для источника со Standard-шифрованием передайте его пароль user или owner в двухаргументную перегрузку. Для источника с шифрованием по открытому ключу назначьте PubSecKeyMaterial и вызовите одноаргументную перегрузку. HotPDF удерживает аутентифицированный файловый ключ или FEK только на время жизни обновления, сохраняет исходные политики строк, stream, метаданных и crypt filter Identity и выводит legacy-ключи per-object из номера объекта и его сохранённого поколения

Словарь шифрования наследуется от ревизии источника и не может быть введён, замещён или переконфигурирован, пока активен инкрементальный режим. Неподдерживаемые гетерогенные перезаписи явных crypt filter падают до вывода, а не выдают шифротекст под другой политикой

 

Этот сценарий полезен для добавления более позднего поля подписи, дозаписи метаданных или расширения уже подписанного документа с сохранением диапазонов байтов, покрытых прежними цифровыми подписями. Активный trailer используется, даже если источник уже содержит несколько ревизий

 

Добавление второй подписи

После загрузки документа текущей страницы нет, поэтому готовое к подписанию поле добавляется через AddLoadedSignedSignatureField, который принимает индекс страницы. Он резервирует место под подпись, которое SignPDFWithPFX — или PreparePDFForSigning и InsertSignatureHex для внешнего подписанта — заполняет после сохранения обновления. Новая подпись покрывает весь файл, а прежние остаются валидными, потому что их байты не трогаются

PDF := THotPDF.Create(nil);
try
  PDF.BeginIncrementalUpdate('Signed.pdf');
  PDF.AddLoadedSignedSignatureField(0, 300, 120, 500, 160, 'Approver', 8192);
  PDF.SaveIncrementalUpdate('Prepared.pdf');
finally
  PDF.Free;
end;
THotPDF.SignPDFWithPFX('Prepared.pdf', 'SignedTwice.pdf', 'Signer.pfx', 'password');

 

См. также: MarkDirty, SaveIncrementalUpdate, AddLoadedSignedSignatureField, GetIncrementalUpdateSourceInfo, Поддержка AcroForm, Поддержка фильтров PDF