PDFium Delphi Component Docs

MergeFiles

コンポーネント: TPdf  ·  ユニット: PDFium
ネイティブのページインポート API を通じてファイルバックエンドの PDF ソースをマージし、ソースハンドルを上限付きで管理しながら明示的な操作ポリシーを公開します

構文

function MergeFiles(const Sources: TPdfBatchMergeSources; out Report: TPdfBatchMergeReport): Boolean; overload;

function MergeFiles(const Sources: TPdfBatchMergeSources; const Options: TPdfBatchMergeOptions; out Report: TPdfBatchMergeReport): Boolean; overload;

class function TPdfBatchMergeSource.FromFile(const AFileName: string; const APageRange: string = ''; const APassword: string = ''): TPdfBatchMergeSource; static;

class function TPdfBatchMergeOptions.Default: TPdfBatchMergeOptions; static;

ソースの選択

既定のオプション

ErrorPolicybmepStop
FormPolicybmfpPreserveNative
OutlinePolicybmopDiscard
ResourcePolicybmrpSourceScoped
PageChunkSizePdfBatchMergeDefaultPageChunkSize、現在は 128 ページ
InsertAt-1 (宛先の末尾に追加)
CreateDestinationTrue
CopyViewerPreferencesTrue
RollbackOnCancelOrFailureTrue

リソースとキャンセルのポリシー

bmrpSourceScoped はソースごとに 1 回のネイティブインポートを実行し、そのソースから選択されたすべてのページに対して PDFium がクローン済みオブジェクトマップを再利用できるようにします

bmrpChunked は選択範囲を PageChunkSize 単位のバッチに分割し、チャンクをまたぐリソースの重複が生じる可能性と引き換えに、より細かいキャンセルポイントと小さなネイティブ呼び出しを提供します

同時に開かれるソース TPdf は最大 1 つで、すべてのソースはインポート試行の直後に閉じられます

キャンセルはソース操作とネイティブバッチの合間にチェックされます。個々の PDFium インポート呼び出しを中断することはできません

OnProgress は開始、オープン、インポート、ソース、ロールバック、キャンセル、失敗、完了の各ステージを受け取り、Cancel パラメータを設定できます。各 TPdfBatchMergeProgress スナップショットは StageSourceIndexSourceCountFileNameSourcePageCountImportedSourceCountImportedPageCountNativeImportCallCount を保持します

TPdfBatchMergeReportStatusSourceCountAttemptedSourceCountImportedSourceCountSkippedSourceCountFailedSourceCountImportedPageCountCommittedPageCountRolledBackPageCountPageCountBeforePageCountAfterNativeImportCallCountLargestNativeImportPageCountPeakOpenSourceCountFormSourceCountOutlineSourceCountDestinationCreatedViewerPreferencesSourceIndexErrorMessageIssues を返します

CancellationToken は、非同期 API およびプログレッシブ API が使用するのと同じ IPdfCancellationToken 契約を受け付けます

フォーム、アウトライン、ビューア設定

失敗とロールバック

1 つ以上のチャンクでページを挿入した後に失敗したソースは、停止またはスキップの処理に進む前に、必ずそのソース境界までロールバックされます

bmepSkip は問題を記録して次のソースへ進み、bmepStop は操作を終了します

RollbackOnCancelOrFailure=True の場合、停止につながる失敗とキャンセルは操作が挿入したすべてのページを取り除き、操作が作成した出力先は閉じられます

ロールバックが無効な場合、正常にインポートされたソースはコミット済みのまま残り、CommittedPageCount に反映されます

ロールバックは挿入されたページを取り除きますが、プロデューサーメタデータのようなすべてのネイティブカタログ副作用の逆転を保証することはできません

レポート

StatusbmrsCompletedbmrsCompletedWithErrorsbmrsCancelledbmrsFailed のいずれかです

レポートは試行、インポート、スキップ、失敗の各ソースを、インポート、コミット、ロールバックの各ページと区別して把握します

NativeImportCallCountLargestNativeImportPageCountPeakOpenSourceCount により、選択したスケジューリングポリシーを計測できます

Issues は失敗と致命的でない終端コールバックエラーについて、ソースインデックス、ファイル名、エラーテキストを保持します

var
  Sources: TPdfBatchMergeSources;
  Options: TPdfBatchMergeOptions;
  Report: TPdfBatchMergeReport;
begin
  SetLength(Sources, 2);
  Sources[0] := TPdfBatchMergeSource.FromFile('part-a.pdf', '1-10');
  Sources[1] := TPdfBatchMergeSource.FromFile('part-b.pdf', '3,1', Password);
  Options := TPdfBatchMergeOptions.Default;
  Options.ErrorPolicy := bmepSkip;
  Options.FormPolicy := bmfpFlatten;
  if not Pdf.MergeFiles(Sources, Options, Report) then
    Log(Report.ErrorMessage);
end;

関連項目

ImportPagesByIndex, ImportPages, 非同期実行