DeduplicateResources
Przetwarzanie dokumentów, Optymalizacja
Opis
Znajduje identyczne bajtowo pośrednie strumienie zasobów w całym wczytanym dokumencie, przekierowuje każde odwołanie do deterministycznego strumienia kanonicznego i opcjonalnie usuwa zduplikowane obiekty pośrednie
Równość wymaga zarówno niezależnej od kolejności sygnatury pełnego słownika strumienia, jak i dokładnej zgodności zakodowanej zawartości strumienia, dlatego maski obrazów, przestrzenie barw, tablice dekodowania, powiązania zawartości opcjonalnej, identyfikatory struktury, metadane, filtry oraz wszystkie semantyczne wpisy słownika pozostają częścią decyzji
Składnia
Delphi
Function TPDFlib.DeduplicateResources(
Options: Integer= PDF_RESOURCE_DEDUP_DEFAULT): Integer; Overload;
Function TPDFlib.DeduplicateResources(Options: Integer;
Out Stats: TPDFlibResourceDedupStats): Integer; Overload;
Parametry
| Options | Bitowa kombinacja stałych opcji deduplikacji zasobów |
|---|---|
| Stats | Otrzymuje liczniki skanowania, haszowania, porównań, odwołań, zawartości, kategorii i obiektów osieroconych |
Opcje typu zasobu
| PDF_RESOURCE_DEDUP_IMAGES | Uwzględnia obiekty XObject obrazów, jawne maski obrazów, obrazy masek miękkich, obrazy alternatywne i miniatury |
|---|---|
| PDF_RESOURCE_DEDUP_FORMS | Uwzględnia obiekty Form XObject, takie jak grafika stron wielokrotnego użytku, wygląd adnotacji i grupy przezroczystości |
| PDF_RESOURCE_DEDUP_PATTERNS | Uwzględnia strumieniowe wzorce kafelkowe |
| PDF_RESOURCE_DEDUP_SHADINGS | Uwzględnia strumieniowe cieniowania siatkowe |
| PDF_RESOURCE_DEDUP_FUNCTIONS | Uwzględnia strumienie funkcji próbkowanych |
| PDF_RESOURCE_DEDUP_ICC_PROFILES | Uwzględnia strumienie profili ICC wskazywane przez przestrzenie barw ICCBased lub intencje wyjściowe |
| PDF_RESOURCE_DEDUP_FONT_PROGRAMS | Uwzględnia strumienie wskazywane przez FontFile, FontFile2 lub FontFile3 |
| PDF_RESOURCE_DEDUP_CMAPS | Uwzględnia strumienie CMap i ToUnicode |
| PDF_RESOURCE_DEDUP_TYPE3_CHARPROCS | Uwzględnia strumienie procedur glifów Type 3 |
| PDF_RESOURCE_DEDUP_EMBEDDED_FILES | Uwzględnia strumienie plików osadzonych |
| PDF_RESOURCE_DEDUP_METADATA | Uwzględnia strumienie metadanych |
| PDF_RESOURCE_DEDUP_POSTSCRIPT | Uwzględnia obiekty XObject PostScript |
| PDF_RESOURCE_DEDUP_ALL_TYPES | Łączy wszystkie dwanaście flag typów zasobów |
Opcje operacji
| PDF_RESOURCE_DEDUP_DRY_RUN | Zgłasza zduplikowane strumienie i odwołania bez zmiany grafu obiektów ani zbierania obiektów |
|---|---|
| PDF_RESOURCE_DEDUP_GARBAGE_COLLECT | Uruchamia zbieranie mark-and-sweep po przekierowaniu odwołań |
| PDF_RESOURCE_DEDUP_DEFAULT | Łączy wszystkie typy zasobów ze zbieraniem obiektów |
Wartości zwracane
| Wartość dodatnia | Liczba zduplikowanych strumieni pośrednich skonsolidowanych lub zgłoszonych przez przebieg próbny |
|---|---|
| 0 | Nie znaleziono kwalifikującego się zduplikowanego strumienia albo nie wczytano dokumentu |
Uwagi
Najniższy numer i generacja obiektu w każdej grupie dokładnej równoważności stają się strumieniem kanonicznym, dzięki czemu powtarzane uruchomienia są deterministyczne
Kolejność kluczy słownika nie wpływa na równość, ale każdy semantyczny klucz i wartość już tak, w tym tożsamość odwołań pośrednich; numeryczny wpis Length najwyższego poziomu jest porównywany według rozwiązanej wartości, dzięki czemu równoważne bezpośrednie i pośrednie postacie długości mogą współdzielić zasób
Zasoby o tej samej zdekodowanej zawartości, lecz różnych filtrach lub zakodowanych bajtach, pozostają osobne, podobnie jak zasoby, których słowniki wskazują różne obiekty zagnieżdżone
Każda kandydująca zawartość jest haszowana raz algorytmem SHA-256, a potwierdzenie bajt po bajcie jest wykonywane tylko w obrębie zgodnego skrótu i sygnatury słownika
Metoda działa na strumieniach pośrednich, ponieważ ISO 32000 wymaga, aby strumienie były obiektami pośrednimi, a zasoby współdzielone są reprezentowane przez odwołania pośrednie
Użyj ustawienia domyślnego po edycji dokumentu i przed pełnym zapisem, aby natychmiast odzyskać bajty zduplikowanych obiektów
Przy zapisie przyrostowym pomiń PDF_RESOURCE_DEDUP_GARBAGE_COLLECT, gdy starsze rewizje muszą pozostać fizycznie nienaruszone; przekierowane odwołania nadal ograniczą duplikację w nowej rewizji, ale nie mogą usunąć bajtów z wcześniejszych rewizji
Przykład
var
Stats: TPDFlibResourceDedupStats;
Merged: Integer;
begin
Merged:= PDF.DeduplicateResources(
PDF_RESOURCE_DEDUP_DEFAULT, Stats);
PDF.SaveToFile('optimised.pdf');
end;
Zobacz również
TPDFlibResourceDedupStats, PurgeUnusedResources, GarbageCollectObjects