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는 텍스트, 패스, 이미지 자식을 재귀적으로 분리하고 비특이 인스턴스 변환과 네이티브 clip을 합성해 원래 Form 위치에 펼친 객체를 삽입합니다. 공유 인스턴스마다 따로 펼치므로 원래 공유 Form 스트림을 직접 수정하지 않습니다ClipRedactionPath는 선이 없는 단색 채우기 패스를 요구합니다. 깊이 상한 안에서 3차 곡선을 평탄화하고 사각형 영역을 빼며 남은 윤곽의 winding 또는 even-odd 채우기를 유지합니다CurveTolerance + 0.001 PDF 포인트만큼 확장합니다. 허용 오차는 곡선 근사를 제한하며 요청 사각형 밖의 작은 추가 여백까지 제거할 수 있습니다MaskRedactionImage는 회전, 반사, skew를 포함한 비특이 아핀 변환과 지원되는 디코딩 Gray, BGR, BGRx, BGRA 샘플을 받습니다. 디코딩 해상도를 유지하고 새로운 교체 이미지를 만듭니다0.001 PDF 포인트 확장한 삭제 사각형과 닿으면 색상과 alpha 바이트를 모두 지웁니다. 남은 픽셀은 디코딩한 색상 샘플을 유지합니다ValidateDetailedRedactionText는 부분 유지에 일반 채우기 텍스트를 요구합니다. 문자 대응과 조각 재구성은 상위 메서드의 책임입니다펼치기와 부분 지오메트리는 투명 또는 blend 상태, 지원하지 않는 자식 유형, 특이 행렬, 패턴 채우기, 복잡하거나 중복이 아닌 clip path를 거부합니다. 지원하는 중복 사각형 clip은 객체의 전체 경계를 포함해야 합니다
| 옵션 | 기본값 | 의미 |
|---|---|---|
MaxFormDepth | 32 | 중첩 Form 펼치기 깊이 |
MaxObjects | 1000000 | 페이지 열거와 펼친 자식의 누적 상한 |
MaxPathSegments | 262144 | 패스별 입력 세그먼트와 생성한 패스 점의 누적 상한 |
MaxFragments | 1000000 | 유지한 사각형 영역과 교체 조각의 누적 상한 |
MaxImagePixels | 16777216 | 처리한 디코딩 이미지 픽셀의 누적 상한 |
MaxGeometryOperations | 67108864 | 지오메트리 및 픽셀 교차 작업의 누적 상한 |
CurveTolerance | 0.01 | PDF 포인트 단위의 3차 곡선 평탄화 허용 오차 |
TPdfRedactionGeometryOptions.Default로 옵션을 초기화하고 트랜잭션 전에 보고를 한 번만 0으로 만드세요. 헬퍼 호출 간에 같은 보고를 유지해 생성 점, 이미지 픽셀, 조각, 연산 상한을 누적해야 합니다
ExpandedFormCount와 ScannedChildCount는 펼치기를 설명하며 방문 수는 루트 Form 인스턴스와 자식을 모두 포함합니다. ClippedPathCount, FlattenedCurveCount, GeneratedPointCount는 중간 clip 점을 포함한 패스 작업입니다. MaskedImageCount, ScannedPixelCount, MaskedPixelCount, PixelIntersectionTestCount는 이미지 작업을 설명합니다
FragmentCount는 다각형 윤곽이나 픽셀이 아닌 교체 객체를 세며 GeometryOperationCount는 상한이 있는 헬퍼 작업을 누적합니다. 예외 후 보고에는 버려지는 트랜잭션 복사본의 부분 작업이 남을 수 있습니다
ValidateDetailedRedactionSource는 변경 전에 활성 객체와 디코딩한 콘텐츠를 검사합니다. TPdf.SaveAsRedacted는 객체 전체 제거와 간단한 부분 프로파일을 포함한 모든 프로파일에서 호출합니다
/ActualText와 /Alt 대체 데이터, XFA, /OCProperties, /OCG, /OCMD를 포함한 optional-content 의미는 거부합니다Tr 피연산자, scn/SCN의 패턴 또는 특수 색 공간 그리기는 거부합니다/FlateDecode 필터여야 합니다. 디코딩은 스트림마다 32 MiB, 합계 64 MiB로 제한합니다현재 프로파일은 Tagged PDF 구조 재구성, 임의 투명도 유지, 임의 선/clip 지원, 인코딩 이미지의 무손실 유지를 약속하지 않습니다. 안전한 출력은 재생성 후 원본 스트림과 사용하지 않는 리소스를 제거해야 하며 TPdf.SaveAsRedacted가 이를 수행합니다
직접 호출한다면 분리된 문서 복사본을 제공하고 네이티브 기능 및 유한한 양의 상한을 검사하세요. 실패 시 복사본을 버리고 수정 페이지 콘텐츠를 재생성하며 내보내기 전에 정리와 리소스 제거를 끝내야 합니다