FPdfRedaction levert conservatieve broninspectie en geometrie-operaties die TPdf.SaveAsRedacted gebruikt; de high-level methode verzorgt de transactie, annotatieverwerking, dekkende overlays, contentregeneratie, opschoning en resource-snoei
De helpers muteren native objecten in de geïsoleerde transactiekopie van de aanroeper en genereren EPdfRedactionGeometry bij niet-ondersteunde geometrie of uitgeputte budgetten; op zichzelf vormen ze geen volledige beveiligde export
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-rechthoeken en krommetoleranties gebruiken PDF-user-space-punten; padpunten worden vóór het clippen naar paginaruimte getransformeerd, en ObjectIndex is de oorspronkelijke, op 0 gebaseerde native paginaobjectindex die de tekenvolgorde bewaart
ExpandRedactionForms ontkoppelt recursief tekst-, pad- en afbeeldingskinderen, stelt niet-singuliere instantietransformaties en native clips samen en voegt de uitgeklapte objecten op de oorspronkelijke Form-positie in; elke gedeelde instantie wordt apart uitgeklapt zodat de oorspronkelijke gedeelde Form-stream niet ter plekke wordt bewerktClipRedactionPath vereist een effen gevuld pad zonder lijn, vlakt kubische segmenten af met een begrensd subdivisiediepte, trekt rechthoekige sneden af en behoudt winding- of even-odd-vulling over de behouden contourenCurveTolerance + 0.001 PDF-punten; de tolerantie begrenst de krommebenadering en kan een kleine extra marge buiten de gevraagde rechthoek wegnemenMaskRedactionImage accepteert niet-singuliere affiene transformaties, inclusief rotatie, spiegeling en afschuiving, en ondersteunde gedecodeerde Gray-, BGR-, BGRx- of BGRA-samples; hij behoudt de gedecodeerde resolutie en maakt een verse vervangende afbeelding0.001 PDF-punten is uitgebreid, krijgt zowel zijn kleur- als alphabytes gewist; behouden pixels houden hun gedecodeerde kleursamplesValidateDetailedRedactionText vereist normale gevulde tekst voor gedeeltelijke retentie; tekenmapping en fragmentreconstructie blijven de verantwoordelijkheid van de high-level methodeUitklapping en partiële geometrie wijzen transparantie- of blendtoestanden, niet-ondersteunde kindtypen, singuliere matrices, patroonvullingen en complexe of niet-redundante clippaden af; een ondersteund redundant rechthoekig clip-pad moet de volledige objectbegrenzing omsluiten
| Optie | Standaard | Betekenis |
|---|---|---|
MaxFormDepth | 32 | Uitklapdiepte van geneste Forms |
MaxObjects | 1000000 | Limieten voor pagina-enumeratie en cumulatief uitgeklapte kinderen |
MaxPathSegments | 262144 | Invoersegmenten per pad en cumulatief gegenereerde padpunten |
MaxFragments | 1000000 | Behouden rechthoekige regio's en cumulatieve vervangingsfragmenten |
MaxImagePixels | 16777216 | Cumulatief verwerkte gedecodeerde afbeeldingspixels |
MaxGeometryOperations | 67108864 | Cumulatief geometrie- en pixelintersectiewerk |
CurveTolerance | 0.01 | Kubische afvlakkingstolerantie in PDF-punten |
Initialiseer de opties met TPdfRedactionGeometryOptions.Default en zet het rapport één keer op nul vóór een transactie; houd dezelfde rapportinstantie aan over de helperaanroepen heen, zodat gegenereerde punten, afbeeldingspixels, fragmenten en operatiebudgetten cumuleren
ExpandedFormCount en ScannedChildCount beschrijven de uitklapping; het aantal bezochte objecten telt zowel hoofdinstanties van Forms als kinderen mee; ClippedPathCount, FlattenedCurveCount en GeneratedPointCount beschrijven het padwerk, inclusief tussentijdse clippunten; MaskedImageCount, ScannedPixelCount, MaskedPixelCount en PixelIntersectionTestCount beschrijven het afbeeldingswerk
FragmentCount telt vervangingsobjecten in plaats van veelhoekcontouren of pixels, en GeometryOperationCount telt het begrensde helperwerk op; een rapport dat door een exception is achtergebleven kan partiëel werk op de weggegooide transactiekopie beschrijven
ValidateDetailedRedactionSource inspecteert actieve objecten en gedecodeerde content vóór de mutatie; TPdf.SaveAsRedacted roept hem aan voor elk profiel, inclusief verwijdering van hele objecten en het eenvoudigere partiële profiel
/ActualText- en /Alt-vervangingsdata, XFA en optional-content-semantiek met /OCProperties, /OCG en /OCMD worden geweigerdTr-operand, en scn/SCN-patroon- of speciale-kleurruimte-verf worden geweigerd/FlateDecode-filter hebben; decoderen is beperkt tot 32 MiB per contentstream en 64 MiB in totaalHet huidige profiel bouwt de Tagged PDF-structuur niet opnieuw op, behoudt geen willekeurige transparantie, ondersteunt geen willekeurige lijnen of clipping en garandeert geen verliesvrije behoud van gecodeerde afbeeldingen; beveiligde uitvoer vereist verwijdering van de oorspronkelijke streams en ongebruikte resources na regeneratie, zoals TPdf.SaveAsRedacted dat doet
Directe aanroepers moeten een geïsoleerde documentkopie aanleveren, native mogelijkheden en eindige positieve budgetten valideren, de kopie bij mislukking weggooien, gewijzigde pagina-inhoud regenereren en opschoning en resource-snoei afronden vóór de export