FPdfRedaction stellt konservative Quellprüfung und Geometrieoperationen für TPdf.SaveAsRedacted bereit; die übergeordnete Methode übernimmt Transaktion, Annotationen, deckende Overlays, Inhaltsregeneration, Bereinigung und Ressourcenentfernung
Die Helper ändern native Objekte in der isolierten Transaktionskopie und lösen bei nicht unterstützter Geometrie oder erschöpften Budgets EPdfRedactionGeometry aus; allein führen sie keinen vollständigen sicheren Export durch
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);
Schwärzungsrechtecke und Kurventoleranzen verwenden PDF-Benutzerraumpunkte; Pfadpunkte werden vor dem Clipping in den Seitenraum transformiert; ObjectIndex ist der ursprüngliche nullbasierte native Seitenobjektindex zur Erhaltung der Zeichenreihenfolge
ExpandRedactionForms löst Text-, Pfad- und Bildkinder rekursiv, kombiniert nicht singuläre Instanztransformationen und native Clips und setzt die expandierten Objekte an die originale Formposition; jede geteilte Instanz wird getrennt expandiert, ohne den geteilten Formstream in-place zu ändernClipRedactionPath verlangt einen einfarbig gefüllten Pfad ohne Kontur, flacht kubische Segmente mit begrenzter Unterteilungstiefe ab, subtrahiert rechteckige Ausschnitte und erhält Nonzero- oder Even-Odd-Füllung der verbleibenden KonturenCurveTolerance + 0.001 PDF-Punkte erweitert; die Toleranz begrenzt die Kurvenapproximation und kann einen kleinen zusätzlichen Rand außerhalb des gewünschten Rechtecks entfernenMaskRedactionImage akzeptiert nicht singuläre affine Transformationen einschließlich Rotation, Spiegelung und Scherung sowie decodierte Gray-, BGR-, BGRx- oder BGRA-Samples; decodierte Auflösung bleibt erhalten, ein neues Ersatzbild wird erstellt0.001 PDF-Punkte erweitertes Schwärzungsrechteck berührt, verliert Farb- und Alphabytes; erhaltene Pixel behalten ihre decodierten FarbsamplesValidateDetailedRedactionText verlangt normal gefüllten Text für Teilerhalt; Zeichenzuordnung und Fragmentrekonstruktion bleiben Aufgabe der übergeordneten MethodeExpansion und Teilgeometrie lehnen Transparenz/Blendzustände, nicht unterstützte Kindtypen, singuläre Matrizen, Musterfüllungen und komplexe oder nicht redundante Clips ab; ein unterstützter redundanter rechteckiger Clip muss die vollständigen Objektgrenzen enthalten
| Option | Standard | Bedeutung |
|---|---|---|
MaxFormDepth | 32 | Expansionstiefe verschachtelter Forms |
MaxObjects | 1000000 | Seitenerfassung und kumulierte expandierte Kinder |
MaxPathSegments | 262144 | Eingabesegmente pro Pfad und kumulierte erzeugte Pfadpunkte |
MaxFragments | 1000000 | Erhaltene Rechteckregionen und kumulierte Ersatzfragmente |
MaxImagePixels | 16777216 | Kumulierte verarbeitete decodierte Bildpixel |
MaxGeometryOperations | 67108864 | Kumulierte Geometrie- und Pixelintersektionstests |
CurveTolerance | 0.01 | Toleranz kubischer Abflachung in PDF-Punkten |
Initialisieren Sie mit TPdfRedactionGeometryOptions.Default und nullen Sie den Bericht einmal vor der Transaktion; behalten Sie ihn zwischen Aufrufen, damit erzeugte Punkte, Bildpixel, Fragmente und Operationen kumuliert werden
ExpandedFormCount und ScannedChildCount beschreiben Expansion; Besuche umfassen Wurzelinstanzen und Kinder; ClippedPathCount, FlattenedCurveCount und GeneratedPointCount beschreiben Pfadarbeit inklusive Zwischenpunkte; MaskedImageCount, ScannedPixelCount, MaskedPixelCount und PixelIntersectionTestCount beschreiben Bildarbeit
FragmentCount zählt Ersatzobjekte, keine Polygonkonturen oder Pixel; GeometryOperationCount kumuliert begrenzte Helperarbeit; nach Ausnahme kann der Bericht Teilarbeit an der verworfenen Kopie beschreiben
ValidateDetailedRedactionSource untersucht aktive Objekte und decodierten Inhalt vor Änderungen; TPdf.SaveAsRedacted ruft es für jedes Profil auf, auch Ganzobjektentfernung und einfaches Teilprofil
/ActualText- und /Alt-Ersatzdaten, XFA und optionale Inhaltssemantik einschließlich /OCProperties, /OCG und /OCMD werden abgelehntTr-Operanden und scn/SCN-Muster-/Sonderfarbraumalerei werden abgelehnt/FlateDecode-Filter haben; Decodierung ist auf 32 MiB pro Stream und 64 MiB insgesamt begrenztDas aktuelle Profil rekonstruiert keine Tagged-PDF-Struktur, erhält keine beliebige Transparenz, unterstützt keine beliebigen Konturen/Clips und verspricht keinen verlustfreien Erhalt codierter Bilder; sicherer Export erfordert nach Regeneration die Entfernung originaler Streams und ungenutzter Ressourcen wie in TPdf.SaveAsRedacted
Direkte Aufrufer benötigen eine isolierte Dokumentkopie, geprüfte native Fähigkeiten und endliche positive Budgets; bei Fehler verwerfen, geänderten Seiteninhalt regenerieren und vor Export Bereinigung und Ressourcenentfernung abschließen