FPdfRedaction leverer konservativ kildeinspektion og geometrioperationer til TPdf.SaveAsRedacted; metoden på højt niveau sørger for transaktionen, annotationer, opake overlays, regenerering af indhold, sanitization og resource pruning
Hjælperne ændrer native objekter i kalderens isolerede transaktionskopi og rejser EPdfRedactionGeometry ved ikke-understøttet geometri eller opbrugte grænser; de udfører ikke alene en komplet sikker eksport
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);
Alle redaction-rektangler og kurvetolerancer bruger PDF user-space points; path-punkter transformeres til siderummet før clipping, og ObjectIndex er det originale nulbaserede native sideobjektindeks, som bevarer tegningsrækkefølgen
ExpandRedactionForms frigør rekursivt tekst-, path- og image-children, kombinerer ikke-singulære instance-transforms og native clips og indsætter de ekspanderede objekter på Forms oprindelige position; hver shared instance ekspanderes separat, så den originale delte Form-stream ikke redigeres på stedetClipRedactionPath kræver en solid filled path uden stroke, flader cubic segments ud med begrænset subdivision-dybde, trækker rektangulære cuts fra og bevarer winding- eller even-odd-fyldning over de tilbageværende konturerCurveTolerance + 0.001 PDF points; tolerancen begrænser kurveapproksimationen og kan fjerne en lille ekstra margen uden for det ønskede rektangelMaskRedactionImage accepterer ikke-singulære affine transforms inklusive rotation, reflection og skew samt understøttede afkodede Gray-, BGR-, BGRx- eller BGRA-samples; den bevarer den afkodede opløsning og opretter et nyt erstatningsbillede0.001 PDF points, får både farve- og alpha-bytes ryddet; bevarede pixels beholder deres afkodede farvesamplesValidateDetailedRedactionText kræver normal filled text for delvis bevarelse; tegnmapping og fragmentrekonstruktion er stadig den overordnede metodes ansvarEkspansion og delvis geometri afviser transparency- eller blend-states, ikke-understøttede child-typer, singulære matricer, patterned fills og komplekse eller ikke-redundante clip paths; en understøttet redundant rektangulær clip skal indeholde hele objektets bounds
| Indstilling | Standard | Betydning |
|---|---|---|
MaxFormDepth | 32 | Ekspansionsdybde for indlejrede Forms |
MaxObjects | 1000000 | Grænser for sideenumeration og samlet antal ekspanderede children |
MaxPathSegments | 262144 | Inputsegments pr. path og samlet antal genererede path-punkter |
MaxFragments | 1000000 | Bevarede rektangelregioner og samlet antal erstatningsfragmenter |
MaxImagePixels | 16777216 | Samlet antal behandlede afkodede billedpixels |
MaxGeometryOperations | 67108864 | Samlet geometriarbejde og pixel-intersection-tests |
CurveTolerance | 0.01 | Cubic flattening-tolerance i PDF points |
Initialisér options med TPdfRedactionGeometryOptions.Default og nulstil rapporten én gang før transaktionen; brug samme rapport på tværs af helper-kald, så genererede punkter, billedpixels, fragmenter og operationsbudgetter akkumuleres
ExpandedFormCount og ScannedChildCount beskriver ekspansion; visited count omfatter både root Form-instanser og children; ClippedPathCount, FlattenedCurveCount og GeneratedPointCount beskriver path-arbejde inklusive mellemliggende clipping-punkter; MaskedImageCount, ScannedPixelCount, MaskedPixelCount og PixelIntersectionTestCount beskriver billedarbejde
FragmentCount tæller erstatningsobjekter, ikke polygonkonturer eller pixels, og GeometryOperationCount akkumulerer begrænset helper-arbejde; en rapport efter exception kan beskrive delvist arbejde på den kasserede transaktionskopi
ValidateDetailedRedactionSource undersøger aktive objekter og afkodet indhold før ændringer; TPdf.SaveAsRedacted kalder den for alle profiler, også fuld objektfjernelse og den enklere delvise profil
/ActualText- og /Alt-erstatningsdata, XFA og optional-content-semantik med /OCProperties, /OCG og /OCMD afvisesTr-operand samt pattern- eller special-color-space-paint med scn/SCN afvises/FlateDecode-filter; afkodning er begrænset til 32 MiB pr. content stream og 64 MiB i altDen aktuelle profil genopbygger ikke Tagged PDF-struktur, bevarer ikke vilkårlig transparency, understøtter ikke vilkårlige strokes eller clipping og lover ikke lossless bevarelse af encoded images; sikkert output kræver fjernelse af originale streams og ubrugte ressourcer efter regenerering, som TPdf.SaveAsRedacted udfører
Direkte kaldere skal levere en isoleret dokumentkopi, kontrollere native capabilities og endelige positive grænser, kassere kopien ved fejl, regenerere ændret sideindhold og fuldføre sanitization og resource pruning før eksport