FPdfRedaction poskytuje konzervativní inspekci zdroje a geometrické operace používané TPdf.SaveAsRedacted; metoda vyšší úrovně zajišťuje transakci, zpracování anotací, neprůhledné překryvy, regeneraci obsahu, sanitizaci a prořezání prostředků
Helpery mění nativní objekty v izolované transakční kopii volajícího a při nepodporované geometrii či vyčerpaných rozpočtech vyvolají EPdfRedactionGeometry; samy o sobě úplný bezpečný export neprovádějí
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);
Všechny redakční obdélníky a tolerance křivek používají body uživatelského prostoru PDF; body cest se před clippingem transformují do prostoru stránky a ObjectIndex je původní index nativního objektu stránky od nuly pro zachování pořadí kreslení
ExpandRedactionForms rekurzivně odděluje potomky textu, cest a obrázků, skládá nesingulární transformace instancí a nativní clip a vkládá rozbalené objekty na původní pozici Form; zvláštní rozbalení každé sdílené instance zabraňuje úpravě původního sdíleného streamu Form na místěClipRedactionPath vyžaduje plně vyplněnou cestu bez stroke, zplošťuje kubické segmenty s omezenou hloubkou dělení, odečítá obdélníkové výřezy a zachovává winding či even-odd vyplňování zbývajících obrysůCurveTolerance + 0.001 bodu PDF; tolerance omezuje aproximaci křivky a může odstranit malý dodatečný okraj mimo požadovaný obdélníkMaskRedactionImage přijímá nesingulární afinní transformace včetně rotace, zrcadlení a skew a podporované dekódované vzorky Gray, BGR, BGRx nebo BGRA; zachovává dekódované rozlišení a vytváří nový náhradní obrázek0.001 bodu PDF, se vymažou bajty barvy i alpha; zbývající pixely zachovají dekódované barevné vzorkyValidateDetailedRedactionText pro částečné zachování vyžaduje normálně vyplněný text; mapování znaků a rekonstrukce fragmentů zůstávají úkolem metody vyšší úrovněRozbalování a částečná geometrie odmítají transparency či blend stavy, nepodporované typy potomků, singulární matice, patterned výplně a složité či neredundantní clip paths; podporovaný redundantní obdélníkový clip musí obsahovat celé hranice objektu
| Volba | Výchozí hodnota | Význam |
|---|---|---|
MaxFormDepth | 32 | Nested Form expansion depth |
MaxObjects | 1000000 | Limity enumerace stránek a souhrnného počtu rozbalených potomků |
MaxPathSegments | 262144 | Vstupní segmenty na cestu a souhrnný počet generovaných bodů cesty |
MaxFragments | 1000000 | Zachované obdélníkové oblasti a souhrnný počet náhradních fragmentů |
MaxImagePixels | 16777216 | Cumulative decoded image pixels processed |
MaxGeometryOperations | 67108864 | Souhrnná práce s geometrií a průsečíky pixelů |
CurveTolerance | 0.01 | Tolerance zploštění kubických křivek v bodech PDF |
Inicializujte volby pomocí TPdfRedactionGeometryOptions.Default a report vynulujte jednou před transakcí; stejný report používejte napříč helpery, aby se sčítaly generované body, pixely obrázků, fragmenty i rozpočty operací
ExpandedFormCount a ScannedChildCount popisují rozbalování; počet navštívených zahrnuje kořenové instance Form i potomky. ClippedPathCount, FlattenedCurveCount a GeneratedPointCount popisují práci s cestami včetně mezilehlých clipping bodů; MaskedImageCount, ScannedPixelCount, MaskedPixelCount a PixelIntersectionTestCount práci s obrázky
FragmentCount počítá náhradní objekty, nikoli polygonové obrysy či pixely, a GeometryOperationCount sčítá omezenou práci helperů; report po výjimce může popisovat částečnou práci na zahozené transakční kopii
ValidateDetailedRedactionSource zkoumá aktivní objekty a dekódovaný obsah před změnou; TPdf.SaveAsRedacted ho volá pro každý profil včetně odstranění celých objektů a jednoduššího částečného profilu
/ActualText a /Alt, XFA a sémantika volitelného obsahu včetně /OCProperties, /OCG a /OCMD se odmítajíTr a kreslení pattern nebo speciálních barevných prostorů přes scn/SCN/FlateDecode; dekódování má limit 32 MiB na stream obsahu a celkem 64 MiBSoučasný profil neobnovuje strukturu Tagged PDF, nezachovává libovolnou průhlednost, nepodporuje libovolné stroke či clipping a neslibuje bezeztrátové zachování zakódovaných obrázků; bezpečný výstup vyžaduje po regeneraci odstranění původních streamů a nepoužívaných prostředků, jak to dělá TPdf.SaveAsRedacted
Přímý volající musí dodat izolovanou kopii dokumentu, ověřit nativní schopnosti a konečné kladné rozpočty, při chybě kopii zahodit, regenerovat změněný obsah stránek a před exportem dokončit sanitizaci a prořezání prostředků