PDFium Delphi Component Docs

上限を設けた墨消しの形状ヘルパー

FPdfRedaction は TPdf.SaveAsRedacted で使う保守的なソース検査と形状処理を提供します。トランザクション、注釈処理、不透明な覆い、内容再生成、サニタイズ、リソース削除は上位メソッドが行います

ヘルパーは呼び出し側の分離したトランザクション用コピーでネイティブオブジェクトを変更し、未対応の形状や上限超過では EPdfRedactionGeometry を送出します。これだけで安全なエクスポート全体を実行するわけではありません

公開宣言

type
  EPdfRedactionGeometry = class(Exception);
  TPdfRedactionGeometryOptions = record
    MaxFormDepth, MaxObjects, MaxPathSegments, MaxFragments: Integer;
    MaxImagePixels, MaxGeometryOperations: Int64;
    CurveTolerance: Double;
    class function Default: TPdfRedactionGeometryOptions; static;
  end;
  TPdfRedactionGeometryReport = record
    ExpandedFormCount, ScannedChildCount, ClippedPathCount: Integer;
    FlattenedCurveCount, GeneratedPointCount, FragmentCount: Integer;
    MaskedImageCount: Integer;
    ScannedPixelCount, MaskedPixelCount, PixelIntersectionTestCount: Int64;
    GeometryOperationCount: Int64;
  end;

procedure ValidateDetailedRedactionSource(Source: TStream);
procedure ValidateDetailedRedactionText(PageObject: FPDF_PAGEOBJECT);
procedure ExpandRedactionForms(Page: FPDF_PAGE;
  const Options: TPdfRedactionGeometryOptions;
  var Report: TPdfRedactionGeometryReport);
procedure ClipRedactionPath(Page: FPDF_PAGE; PageObject: FPDF_PAGEOBJECT;
  ObjectIndex: Integer; const Redactions: array of FS_RECTF;
  const Options: TPdfRedactionGeometryOptions;
  var Report: TPdfRedactionGeometryReport);
procedure MaskRedactionImage(Document: FPDF_DOCUMENT; Page: FPDF_PAGE;
  PageObject: FPDF_PAGEOBJECT; ObjectIndex: Integer;
  const Redactions: array of FS_RECTF;
  const Options: TPdfRedactionGeometryOptions;
  var Report: TPdfRedactionGeometryReport);

座標と対応する形状

墨消し矩形と曲線許容値はすべて PDF ユーザー空間のポイント単位です。パス点はクリップ前にページ空間へ変換し、ObjectIndex は描画順を保持するための元の 0 始まりのネイティブページオブジェクト番号です

展開と部分形状処理は、透明/blend 状態、未対応の子型、特異行列、pattern fill、複雑または冗長でない clip path を拒否します。対応する冗長な矩形クリップは、オブジェクト全体の境界を含む必要があります

オプションと累積報告

オプション既定値意味
MaxFormDepth32入れ子の Form を展開する深さ
MaxObjects1000000ページ列挙と展開した子の累積上限
MaxPathSegments262144パスごとの入力セグメントと生成したパス点の累積上限
MaxFragments1000000保持する矩形領域と置換断片の累積上限
MaxImagePixels16777216処理するデコード済み画像ピクセルの累積上限
MaxGeometryOperations67108864形状処理とピクセル交差検査の累積上限
CurveTolerance0.01PDF ポイント単位の 3 次曲線平坦化許容値

TPdfRedactionGeometryOptions.Default でオプションを初期化し、トランザクション前に一度だけ報告をゼロにします。ヘルパー間で同じ報告を使い、生成点、画像ピクセル、断片、処理回数の上限を累積させてください

ExpandedFormCount と ScannedChildCount は展開の報告で、訪問数にはルート Form インスタンスと子を含みます。ClippedPathCount、FlattenedCurveCount、GeneratedPointCount は途中のクリップ点を含むパス処理を示します。MaskedImageCount、ScannedPixelCount、MaskedPixelCount、PixelIntersectionTestCount は画像処理を示します

FragmentCount は多角形輪郭やピクセルではなく置換オブジェクトを数え、GeometryOperationCount は上限付きヘルパー処理を累積します。例外後の報告には、破棄するトランザクション用コピーの途中までの処理が残る場合があります

ソース検査とエクスポートの範囲

ValidateDetailedRedactionSource は変更前に有効オブジェクトとデコード済み内容を検査します。TPdf.SaveAsRedacted はオブジェクト全体の削除や簡易部分プロファイルを含む、すべてのプロファイルで呼び出します

現在のプロファイルは Tagged PDF 構造の再構築、任意の透明状態の保持、任意の線やクリップへの対応、エンコード済み画像の無損失保持を約束しません。安全な出力には再生成後の元ストリームと不要リソースの削除が必要で、TPdf.SaveAsRedacted が実行します

直接呼び出す場合は文書を分離してコピーし、ネイティブ機能と有限の正の上限を確認してください。失敗時はコピーを破棄し、変更ページの内容を再生成して、エクスポート前にサニタイズとリソース削除を完了させる必要があります

関連項目

TPdf.SaveAsRedacted, TPdf.SaveAsSanitised, FPdfCompress