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 始まりのネイティブページオブジェクト番号です
ExpandRedactionForms はテキスト、パス、画像の子を再帰的に切り離し、非特異なインスタンス変換とネイティブクリップを合成して、元の Form 位置に展開オブジェクトを挿入します。共有インスタンスごとに展開するため、元の共有 Form ストリームを直接編集しませんClipRedactionPath は線を持たない単色の塗りパスを必要とします。3 次曲線を深さ上限付きで平坦化し、矩形の切り抜きを差し引いて、残す輪郭の winding または even-odd fill を保持しますCurveTolerance + 0.001 PDF ポイント分だけ広げます。許容値は曲線近似の誤差を制限し、要求矩形の外側にも小さな余白を削除する場合がありますMaskRedactionImage は回転、反転、skew を含む非特異なアフィン変換と、対応するデコード済み Gray、BGR、BGRx、BGRA サンプルを受け付けます。デコード後の解像度を保持し、新しい置換画像を作成します0.001 PDF ポイント広げた墨消し矩形に触れるピクセルは、色と alpha の両方を消去します。残すピクセルのデコード済み色サンプルは維持しますValidateDetailedRedactionText は部分的に残すテキストに通常の塗りを要求します。文字の対応付けと断片の再構築は上位メソッドの責任です展開と部分形状処理は、透明/blend 状態、未対応の子型、特異行列、pattern fill、複雑または冗長でない clip path を拒否します。対応する冗長な矩形クリップは、オブジェクト全体の境界を含む必要があります
| オプション | 既定値 | 意味 |
|---|---|---|
MaxFormDepth | 32 | 入れ子の Form を展開する深さ |
MaxObjects | 1000000 | ページ列挙と展開した子の累積上限 |
MaxPathSegments | 262144 | パスごとの入力セグメントと生成したパス点の累積上限 |
MaxFragments | 1000000 | 保持する矩形領域と置換断片の累積上限 |
MaxImagePixels | 16777216 | 処理するデコード済み画像ピクセルの累積上限 |
MaxGeometryOperations | 67108864 | 形状処理とピクセル交差検査の累積上限 |
CurveTolerance | 0.01 | PDF ポイント単位の 3 次曲線平坦化許容値 |
TPdfRedactionGeometryOptions.Default でオプションを初期化し、トランザクション前に一度だけ報告をゼロにします。ヘルパー間で同じ報告を使い、生成点、画像ピクセル、断片、処理回数の上限を累積させてください
ExpandedFormCount と ScannedChildCount は展開の報告で、訪問数にはルート Form インスタンスと子を含みます。ClippedPathCount、FlattenedCurveCount、GeneratedPointCount は途中のクリップ点を含むパス処理を示します。MaskedImageCount、ScannedPixelCount、MaskedPixelCount、PixelIntersectionTestCount は画像処理を示します
FragmentCount は多角形輪郭やピクセルではなく置換オブジェクトを数え、GeometryOperationCount は上限付きヘルパー処理を累積します。例外後の報告には、破棄するトランザクション用コピーの途中までの処理が残る場合があります
ValidateDetailedRedactionSource は変更前に有効オブジェクトとデコード済み内容を検査します。TPdf.SaveAsRedacted はオブジェクト全体の削除や簡易部分プロファイルを含む、すべてのプロファイルで呼び出します
/ActualText と /Alt の置換データ、XFA、/OCProperties、/OCG、/OCMD を含む optional content の意味は拒否しますTr オペランド、scn/SCN の pattern/特殊色空間による描画は拒否します/FlateDecode フィルターである必要があります。デコード上限はストリームごとに 32 MiB、合計 64 MiB です現在のプロファイルは Tagged PDF 構造の再構築、任意の透明状態の保持、任意の線やクリップへの対応、エンコード済み画像の無損失保持を約束しません。安全な出力には再生成後の元ストリームと不要リソースの削除が必要で、TPdf.SaveAsRedacted が実行します
直接呼び出す場合は文書を分離してコピーし、ネイティブ機能と有限の正の上限を確認してください。失敗時はコピーを破棄し、変更ページの内容を再生成して、エクスポート前にサニタイズとリソース削除を完了させる必要があります