THotPDF.BeginIncrementalUpdate

THotPDF

 

トップへ  メソッド  次へ

既存の PDF をロードし、ドキュメントを追加専用(append-only)の増分更新(incremental update)モードに切り替えます。

 

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);

 

説明

元のバイトを書き換えずに既存の PDF を拡張する必要があるときは、BeginIncrementalUpdate を呼び出します。HotPDF はアクティブな trailer または xref ストリーム辞書を解析して permanent / modification の両 ID を取り込み、ファイルバックストリームでソースファイルを書き込みロックしたまま保ち、ソース全体のコピーではなく上限付きの末尾プローブだけを保持します

 

この呼び出しの後に作成された新しい indirect object は自動的に dirty としてマークされます。既存の読み込み済みオブジェクトは、呼び出し元が MarkDirty でマークした場合にのみ再出力されます

 

Standard 暗号化のソースには、2 引数オーバーロードに user または owner パスワードを渡します。公開鍵暗号化のソースには、PubSecKeyMaterial を代入して 1 引数オーバーロードを呼びます。HotPDF は認証済みファイル鍵または FEK を更新の期間だけ保持し、元の文字列・ストリーム・メタデータ・Identity の各暗号フィルタポリシーを保ち、レガシーのオブジェクトごとの鍵をオブジェクト番号と保持された世代の両方から導出します

暗号化辞書はソースリビジョンから継承され、増分モードが有効な間は導入・置き換え・再設定できません。対応しない異種の明示的暗号フィルタ書き換えは、異なるポリシーで暗号文を出力する前に失敗します

 

このワークフローは、後で署名フィールドを追加したり、メタデータを追加したり、以前のデジタル署名でカバーされているバイト範囲を保持しながら、すでに署名されているドキュメントを拡張したりする場合に役立ちます

 

2 つ目の署名を追加する

ドキュメントを読み込んだ後にはカレントページが存在しないため、署名できるフィールドはページインデックスを受け取る 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');

 

See also: MarkDirty, SaveIncrementalUpdate, AddLoadedSignedSignatureField, GetIncrementalUpdateSourceInfo, AcroForm サポート, PDF フィルターのサポート