FPdfRedaction fournit une inspection prudente de la source et les opérations géométriques utilisées par TPdf.SaveAsRedacted ; la méthode de haut niveau apporte la transaction, le traitement des annotations, les caches opaques, la régénération du contenu, l’assainissement et l’élagage des ressources
Les helpers modifient les objets natifs dans la copie de transaction isolée de l’appelant et lèvent EPdfRedactionGeometry pour une géométrie non prise en charge ou un budget épuisé ; ils ne réalisent pas seuls un export sécurisé complet
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);
Les rectangles et tolérances de courbe utilisent des points dans l’espace utilisateur PDF ; les points des tracés sont transformés dans l’espace de page avant découpage, et ObjectIndex est l’indice natif original de l’objet, commençant à zéro, qui permet de conserver l’ordre de dessin
ExpandRedactionForms détache récursivement les enfants texte, tracé et image, compose les transformations d’instance non singulières et découpages natifs, puis insère les objets développés à la position du Form original ; développer séparément chaque instance partagée évite de modifier son flux partagé en placeClipRedactionPath exige un tracé rempli de couleur unie sans contour, aplatit les segments cubiques avec une profondeur de subdivision bornée, soustrait les coupes rectangulaires et conserve le remplissage non nul ou pair-impair des contours restantsCurveTolerance + 0.001 points PDF ; la tolérance borne l’approximation des courbes et peut retirer une petite marge supplémentaire hors du rectangle demandéMaskRedactionImage accepte les transformations affines non singulières, dont rotation, réflexion et cisaillement, et les échantillons décodés Gray, BGR, BGRx ou BGRA pris en charge ; elle conserve la résolution décodée et crée une nouvelle image de remplacement0.001 point PDF voit ses octets de couleur et d’alpha effacés ; les pixels conservés gardent leurs échantillons de couleur décodésValidateDetailedRedactionText exige un texte normalement rempli pour une conservation partielle ; la correspondance des caractères et la reconstruction des fragments restent à la charge de la méthode de haut niveauLe développement et la géométrie partielle refusent la transparence et les états de mélange, types d’enfant non pris en charge, matrices singulières, remplissages à motif et découpages complexes ou non redondants ; un découpage rectangulaire redondant pris en charge doit contenir toutes les limites de l’objet
| Option | Valeur par défaut | Signification |
|---|---|---|
MaxFormDepth | 32 | Profondeur de développement des Form imbriqués |
MaxObjects | 1000000 | Limites d’énumération des pages et du cumul des enfants développés |
MaxPathSegments | 262144 | Segments d’entrée par tracé et cumul des points générés |
MaxFragments | 1000000 | Régions rectangulaires conservées et cumul des fragments de remplacement |
MaxImagePixels | 16777216 | Cumul des pixels d’image décodés traités |
MaxGeometryOperations | 67108864 | Cumul des opérations géométriques et d’intersection des pixels |
CurveTolerance | 0.01 | Tolérance d’aplatissement cubique en points PDF |
Initialisez les options avec TPdfRedactionGeometryOptions.Default et mettez le rapport à zéro une seule fois avant la transaction ; conservez ce rapport entre les appels pour cumuler points générés, pixels d’image, fragments et budgets d’opérations
ExpandedFormCount et ScannedChildCount décrivent le développement ; les visites comprennent les instances Form racines et leurs enfants ; ClippedPathCount, FlattenedCurveCount et GeneratedPointCount décrivent les tracés, y compris les points intermédiaires de découpage ; MaskedImageCount, ScannedPixelCount, MaskedPixelCount et PixelIntersectionTestCount décrivent les images
FragmentCount compte les objets de remplacement, et non les contours ou pixels ; GeometryOperationCount cumule le travail borné des helpers ; après une exception, le rapport peut décrire un travail partiel sur la copie abandonnée
ValidateDetailedRedactionSource inspecte les objets actifs et le contenu décodé avant modification ; TPdf.SaveAsRedacted l’appelle pour chaque profil, y compris la suppression d’objets entiers et le profil partiel plus simple
/ActualText et /Alt, XFA et les sémantiques de contenu facultatif, dont /OCProperties, /OCG et /OCMD, sont refusésTr inconnus, et peintures scn/SCN à motif ou espace spécial sont refusés/FlateDecode ; le décodage est limité à 32 MiB par flux et 64 MiB au totalLe profil actuel ne reconstruit pas Tagged PDF, ne préserve pas la transparence arbitraire, ne prend pas en charge tous les contours ou découpages et ne promet pas une conservation sans perte des images encodées ; une sortie sécurisée exige de retirer les flux d’origine et ressources inutilisées après régénération, comme le fait TPdf.SaveAsRedacted
L’appelant direct doit fournir une copie isolée, vérifier les capacités natives et des budgets finis positifs, abandonner la copie en cas d’échec, régénérer le contenu des pages modifiées et achever l’assainissement et l’élagage avant exportation