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

OptionsBitowa kombinacja stałych opcji deduplikacji zasobów
StatsOtrzymuje liczniki skanowania, haszowania, porównań, odwołań, zawartości, kategorii i obiektów osieroconych

Opcje typu zasobu

PDF_RESOURCE_DEDUP_IMAGESUwzględnia obiekty XObject obrazów, jawne maski obrazów, obrazy masek miękkich, obrazy alternatywne i miniatury
PDF_RESOURCE_DEDUP_FORMSUwzględnia obiekty Form XObject, takie jak grafika stron wielokrotnego użytku, wygląd adnotacji i grupy przezroczystości
PDF_RESOURCE_DEDUP_PATTERNSUwzględnia strumieniowe wzorce kafelkowe
PDF_RESOURCE_DEDUP_SHADINGSUwzględnia strumieniowe cieniowania siatkowe
PDF_RESOURCE_DEDUP_FUNCTIONSUwzględnia strumienie funkcji próbkowanych
PDF_RESOURCE_DEDUP_ICC_PROFILESUwzględnia strumienie profili ICC wskazywane przez przestrzenie barw ICCBased lub intencje wyjściowe
PDF_RESOURCE_DEDUP_FONT_PROGRAMSUwzględnia strumienie wskazywane przez FontFile, FontFile2 lub FontFile3
PDF_RESOURCE_DEDUP_CMAPSUwzględnia strumienie CMap i ToUnicode
PDF_RESOURCE_DEDUP_TYPE3_CHARPROCSUwzględnia strumienie procedur glifów Type 3
PDF_RESOURCE_DEDUP_EMBEDDED_FILESUwzględnia strumienie plików osadzonych
PDF_RESOURCE_DEDUP_METADATAUwzględnia strumienie metadanych
PDF_RESOURCE_DEDUP_POSTSCRIPTUwzględnia obiekty XObject PostScript
PDF_RESOURCE_DEDUP_ALL_TYPESŁączy wszystkie dwanaście flag typów zasobów

Opcje operacji

PDF_RESOURCE_DEDUP_DRY_RUNZgłasza zduplikowane strumienie i odwołania bez zmiany grafu obiektów ani zbierania obiektów
PDF_RESOURCE_DEDUP_GARBAGE_COLLECTUruchamia 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ść dodatniaLiczba zduplikowanych strumieni pośrednich skonsolidowanych lub zgłoszonych przez przebieg próbny
0Nie 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