PDFium Delphi Component Docs

トランザクションとして扱う AcroForm 結合

FPdfFormMerge を追加すると MergePdfFilesWithForms または TPdfFormMergeHelper.MergeFilesWithForms を使えます

ヘルパーは選択ページのインポートとフィールド移植を準備し、親を失ったインポート済みウィジェットを削除します。保存結果を別途開いてから呼び出し元の文書を置き換えるため、エラーやキャンセル時は出力先を保持します

pagcpReject は完全修飾フィールド名の重複を拒否し、pagcpRename は決定的で衝突しない接頭辞と接尾辞を付けます。pagcpNamespace は実際の親フィールドを挿入してソースごとに分離します

pagcpMergeCompatible は互換性のある末端のテキスト/選択フィールドを結合し、ウィジェットで値を共有します。flags、値、既定値、選択肢、独立したフォントの意味が同じである必要があり、フィールドのアクション、rich text、非互換のフィールド型は拒否します

選択ページによる絞り込みで不要なウィジェットとフィールドを削除し、絞り込みと重複除去後の計算順序を保持します。既定リソースを分離して既定外観の名前を書き換え、複製した外観ストリームはそれぞれのリソースを保持します

フィールドとウィジェットが一体の辞書は、互換フィールドの結合前に正規化します。独立した名前は保存して開き直した後も個別に編集できます

InsertAt は 0 始まりの挿入位置で、-1 は末尾に追加します。既定の上限は合計 10,000 ページ、文書ごとに 256 MiB、移植は 100,000 オブジェクトと深さ 128 です

移植のハード上限は 1,000,000 オブジェクト、深さ 256、ルートフィールド 4,096 個です。選択ページの重複、ソースまたは出力先の XFA や署名、暗号化された出力先は拒否します

ソースのパスワードで準備中の結合用に復号できます。結果は暗号化されないので、必要に応じてその後に明示的な暗号化処理を行ってください

従来の GraftPdfAcroForm オーバーロードは拒否ポリシーを維持します。TPdfAcroFormGraftOptions を受け取るオーバーロードは、同じ衝突/リソースポリシーをストリーム単位で公開します

このフォームヘルパーはソースの outline や名前付き宛先を保持しません。宣言されたナビゲーション処理にはナビゲーションヘルパーを使ってください

Options := TPdfFormMergeOptions.Default;
Options.GraftOptions.CollisionPolicy := pagcpNamespace;
if not MergePdfFilesWithForms(Pdf, Sources, Options, Report) then
  raise EPdfError.Create(Report.ErrorMessage);

公開宣言

type
  TPdfFormMergeOptions= record
    GraftOptions: TPdfAcroFormGraftOptions;
    InsertAt: Integer;
    MaxPages: Integer;
    MaxDocumentBytes: Int64;
    CancellationToken: IPdfCancellationToken;
    class function Default: TPdfFormMergeOptions; static;
  end;
  TPdfFormMergeReport= record
    Succeeded, Cancelled: Boolean;
    ImportedSourceCount, ImportedPageCount: Integer;
    GraftedFieldCount, RenamedFieldCount, MergedFieldCount: Integer;
    FilteredFieldCount, FilteredWidgetCount, ResourceRenameCount: Integer;
    ErrorMessage: string;
  end;

function MergePdfFilesWithForms(Destination: TPdf;
  const Sources: TPdfBatchMergeSources; const Options: TPdfFormMergeOptions;
  out Report: TPdfFormMergeReport): Boolean;

type
  TPdfFormMergeHelper= class helper for TPdf
    function MergeFilesWithForms(const Sources: TPdfBatchMergeSources;
      const Options: TPdfFormMergeOptions;
      out Report: TPdfFormMergeReport): Boolean;
  end;