FPdfRedaction dostarcza konserwatywną inspekcję źródła i operacje geometryczne używane przez TPdf.SaveAsRedacted; metoda wysokiego poziomu dostarcza transakcję, przetwarzanie adnotacji, nieprzezroczyste nakładki, regenerację zawartości, sanearyzację i przycinanie zasobów
Helpery modyfikują obiekty natywne w izolowanej kopii transakcji wywołującego i podnoszą EPdfRedactionGeometry przy nieobsługiwanej geometrii lub wyczerpanych budżetach; same nie wykonują kompletnego bezpiecznego eksportu
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);
Wszystkie prostokąty redakcji i tolerancje krzywych używają punktów przestrzeni użytkownika PDF; punkty ścieżek są transformowane do przestrzeni strony przed przycinaniem, a ObjectIndex to oryginalny indeks natywnego obiektu strony liczony od zera, używany do zachowania kolejności malowania
ExpandRedactionForms rekurencyjnie odczepia dzieci typu text, path i image, składa osobliwe transformacje instancji i natywne przycięcia oraz wstawia rozwinięte obiekty na pierwotnej pozycji Form; osobne rozwinięcie każdej współdzielonej instancji pozwala uniknąć edycji pierwotnego współdzielonego strumienia Form w miejscuClipRedactionPath wymaga pełnego wypełnionej ścieżki bez konturu, spłaszcza segmenty sześcienne z ograniczoną głębokością subdywizji, odejmuje prostokątne wycięcia i zachowuje wypełnianie nonzero lub even-odd w zachowanych konturachCurveTolerance + 0.001 punktu PDF; tolerancja ogranicza aproksymację krzywych i może usunąć niewielki dodatkowy margines poza żądanym prostokątemMaskRedactionImage akceptuje osobliwe transformacje afiniczne, włącznie z rotacją, odbiciem i ścinaniem, oraz obsługiwane zdekodowane próbki Gray, BGR, BGRx lub BGRA; zachowuje zdekodowaną rozdzielczość i tworzy świeży obraz zastępczy0.001 punktu PDF, ma wyzerowane bajty koloru i alfa; zachowane piksele trzymają swoje zdekodowane próbki kolorówValidateDetailedRedactionText wymaga normalnego wypełnionego tekstu do częściowego zachowania; mapowanie znaków i rekonstrukcja fragmentów pozostają odpowiedzialnością metody wysokiego poziomuRozwinięcie i częściowa geometria odrzucają przezroczystość lub stany mieszania, nieobsługiwane typy dzieci, macierze osobliwe, wypełnienia wzorami oraz złożone lub nienadmiarowe ścieżki przycinania; obsługiwana nadmiarowa prostokątna klip musi zawierać kompletne granice obiektu
| Opcja | Domyślnie | Znaczenie |
|---|---|---|
MaxFormDepth | 32 | Głębokość rozwijania zagnieżdżonych Form |
MaxObjects | 1000000 | Limity enumeracji stron i kumulatywnych rozwiniętych dzieci |
MaxPathSegments | 262144 | Segmenty wejściowe na ścieżkę i kumulatywne wygenerowane punkty ścieżek |
MaxFragments | 1000000 | Zachowane regiony prostokątne i kumulatywne fragmenty zastępcze |
MaxImagePixels | 16777216 | Kumulatywna liczba przetworzonych zdekodowanych pikseli obrazów |
MaxGeometryOperations | 67108864 | Kumulatywna praca geometryczna i testy przecięć pikseli |
CurveTolerance | 0.01 | Tolerancja spłaszczania sześciennego w punktach PDF |
Zainicjalizuj opcje przez TPdfRedactionGeometryOptions.Default i wyzeruj raport raz przed transakcją; trzymaj ten sam raport między wywołaniami helperów, aby wygenerowane punkty, piksele obrazów, fragmenty i budżety operacji się kumulowały
ExpandedFormCount i ScannedChildCount opisują rozwinięcie; licznik odwiedzin obejmuje instancje Form głównych oraz dzieci; ClippedPathCount, FlattenedCurveCount i GeneratedPointCount opisują pracę na ścieżkach, włącznie z pośrednimi punktami przycinania; MaskedImageCount, ScannedPixelCount, MaskedPixelCount i PixelIntersectionTestCount opisują pracę na obrazach
FragmentCount liczy obiekty zastępcze, a nie kontury wielokątów czy piksele, a GeometryOperationCount akumuluje ograniczoną pracę helperów; raport pozostawiony przez wyjątek może opisywać częściową pracę na odrzuconej kopii transakcji
ValidateDetailedRedactionSource bada aktywne obiekty i zdekodowaną zawartość przed modyfikacją; TPdf.SaveAsRedacted wywołuje go dla każdego profilu, włącznie z usuwaniem całych obiektów i prostszym profilem częściowym
/ActualText i /Alt, XFA oraz semantyka optional-content, w tym /OCProperties, /OCG i /OCMD, są odrzucaneTr oraz malowanie scn/SCN wzorem lub w specjalnej przestrzeni kolorów są odrzucane/FlateDecode; dekodowanie jest ograniczone do 32 MiB na strumień zawartości i 64 MiB łącznieObecny profil nie przebudowuje struktury Tagged PDF, nie zachowuje dowolnej przezroczystości, nie obsługuje dowolnych konturów ani przycinania i nie obiecuje bezstratnego zachowania zakodowanych obrazów; bezpieczne wyjście wymaga usunięcia oryginalnych strumieni i nieużywanych zasobów po regeneracji, co wykonuje TPdf.SaveAsRedacted
Bezpośredni wywołujący muszą dostarczyć izolowaną kopię dokumentu, zwalidować natywne możliwości i skończone dodatnie budżety, odrzucić kopię przy niepowodzeniu, zregenerować zawartość zmodyfikowanych stron i dokończyć sanearyzację oraz przycinanie zasobów przed eksportem