DeduplicateResources
Manipulace s dokumenty, optimalizace
Popis
Najde byte-identické nepřímé zdrojové proudy v celém načteném dokumentu, přesměruje každou referenci na deterministický kanonický proud a volitelně odstraní duplicitní nepřímé objekty
Rovnost vyžaduje jak pořadí-nezávislý podpis kompletního slovníku proudu, tak přesnou shodu kódované datové části proudu, takže masky obrázků, barevné prostory, dekódovací pole, vazby volitelného obsahu, identifikátory struktury, metadata, filtry a každá sémantická položka slovníku zůstávají součástí rozhodnutí
Syntaxe
Delphi
Function TPDFlib.DeduplicateResources(
Options: Integer= PDF_RESOURCE_DEDUP_DEFAULT): Integer; Overload;
Function TPDFlib.DeduplicateResources(Options: Integer;
Out Stats: TPDFlibResourceDedupStats): Integer; Overload;
Parametry
| Options | Bitová kombinace konstant voleb deduplikace prostředků |
|---|---|
| Stats | Přijímá čítače skenování, hashování, porovnávání, referencí, datové části, kategorií a osamocených objektů |
Volby typu prostředku
| PDF_RESOURCE_DEDUP_IMAGES | Zahrnuje Image XObject, explicitní masky obrázků, obrázky soft-masek, alternativní obrázky a miniatury |
|---|---|
| PDF_RESOURCE_DEDUP_FORMS | Zahrnuje Form XObject, jako je znovu použitelná grafika stránek, vzhledy anotací a skupiny průhlednosti |
| PDF_RESOURCE_DEDUP_PATTERNS | Zahrnuje dlaždicové vzory založené na proudech |
| PDF_RESOURCE_DEDUP_SHADINGS | Zahrnuje mesh stínování založená na proudech |
| PDF_RESOURCE_DEDUP_FUNCTIONS | Zahrnuje proudy vzorkovaných funkcí |
| PDF_RESOURCE_DEDUP_ICC_PROFILES | Zahrnuje proudy profilů ICC odkazované barevnými prostory ICCBased nebo výstupními záměry |
| PDF_RESOURCE_DEDUP_FONT_PROGRAMS | Zahrnuje proudy odkazované přes FontFile, FontFile2 nebo FontFile3 |
| PDF_RESOURCE_DEDUP_CMAPS | Zahrnuje proudy CMap a ToUnicode |
| PDF_RESOURCE_DEDUP_TYPE3_CHARPROCS | Zahrnuje proudy procedur glyfů Type 3 |
| PDF_RESOURCE_DEDUP_EMBEDDED_FILES | Zahrnuje proudy vložených souborů |
| PDF_RESOURCE_DEDUP_METADATA | Zahrnuje proudy metadat |
| PDF_RESOURCE_DEDUP_POSTSCRIPT | Zahrnuje XObject PostScript |
| PDF_RESOURCE_DEDUP_ALL_TYPES | Kombinuje všech dvanáct příznaků typů prostředků |
Volby operace
| PDF_RESOURCE_DEDUP_DRY_RUN | Hlásí duplicitní proudy a reference, aniž by měnila graf objektů nebo sbírala objekty |
|---|---|
| PDF_RESOURCE_DEDUP_GARBAGE_COLLECT | Spustí sbírání mark-and-sweep poté, co se přesměrují reference |
| PDF_RESOURCE_DEDUP_DEFAULT | Kombinuje všechny typy prostředků s úklidem odpadu |
Návratové hodnoty
| Positive value | Počet duplicitních nepřímých proudů konsolidovaných nebo nahlášených suchým během |
|---|---|
| 0 | Nenalezen žádný vyhovující duplicitní proud nebo není načten žádný dokument |
Poznámky
Nejnižší číslo objektu a generace v každé skupině přesné ekvivalence se stane kanonickým proudem, což činí opakovaná běžení deterministickými
Pořadí klíčů slovníku neovlivňuje rovnost, ale každý sémantický klíč a hodnota ano, včetně identity nepřímého odkazu; číselná položka Length nejvyšší úrovně se porovnává podle rozlišené hodnoty, takže ekvivalentní přímé a nepřímé formy délky mohou sdílet prostředek
Prostředky se stejným dekódovaným obsahem, ale jinými filtry či kódovanými bajty zůstávají oddělené, stejně jako prostředky, jejichž slovníky odkazují na různé vnořené objekty
Všechny kandidátské datové části se jednou proházejí SHA-256 a potvrzení bajt po bajtu běží jen uvnitř shodného kyblíku hashe a podpisu slovníku
Metoda pracuje na nepřímých proudech, protože ISO 32000 vyžaduje, aby proudy byly nepřímé objekty, a sdílené prostředky se reprezentují nepřímými odkazy
Použijte výchozí po úpravě dokumentu a před plným ukládáním, abyste hned získali zpět duplicitní bajty objektů
Při inkrementálním ukládání vynechejte PDF_RESOURCE_DEDUP_GARBAGE_COLLECT, když musí staré revize zůstat fyzicky nedotčené; přesměrované reference stále snižují duplicitu v nové revizi, ale nemohou odstranit bajty z dřívějších revizí
Příklad
var
Stats: TPDFlibResourceDedupStats;
Merged: Integer;
begin
Merged:= PDF.DeduplicateResources(
PDF_RESOURCE_DEDUP_DEFAULT, Stats);
PDF.SaveToFile('optimised.pdf');
end;
Viz také
TPDFlibResourceDedupStats, PurgeUnusedResources, GarbageCollectObjects