DeduplicateResources
Dokumentbehandling, optimering
Beskrivelse
Finder byteidentiske indirekte ressourcestreams i hele det indlæste dokument, omdirigerer hver reference til en deterministisk kanonisk stream og fjerner eventuelt de dublerede indirekte objekter
Lighed kræver både en rækkefølgeuafhængig signatur af hele streamordbogen og et nøjagtigt match af den kodede streamnyttelast, så billedmasker, farverum, afkodningsarrays, tilknytninger til valgfrit indhold, strukturidentifikatorer, metadata, filtre og hver semantisk ordbogspost forbliver en del af beslutningen
Syntaks
Delphi
Function TPDFlib.DeduplicateResources(
Options: Integer= PDF_RESOURCE_DEDUP_DEFAULT): Integer; Overload;
Function TPDFlib.DeduplicateResources(Options: Integer;
Out Stats: TPDFlibResourceDedupStats): Integer; Overload;
Parametre
| Options | En bitvis kombination af indstillingskonstanter for ressourcededuplikering |
|---|---|
| Stats | Modtager tællere for scanning, hashing, sammenligning, referencer, payloads, kategorier og forældreløse objekter |
Indstillinger for ressourcetyper
| PDF_RESOURCE_DEDUP_IMAGES | Medtager image XObjects, eksplicitte billedmasker, soft-mask-billeder, alternative billeder og miniaturer |
|---|---|
| PDF_RESOURCE_DEDUP_FORMS | Medtager Form XObjects såsom genbrugelig sidegrafik, annotationers appearances og gennemsigtighedsgrupper |
| PDF_RESOURCE_DEDUP_PATTERNS | Omfatter streambaserede flisemønstre |
| PDF_RESOURCE_DEDUP_SHADINGS | Medtager strømbaserede mesh-shadings |
| PDF_RESOURCE_DEDUP_FUNCTIONS | Medtager samplede funktionsstrømme |
| PDF_RESOURCE_DEDUP_ICC_PROFILES | Medtager ICC-profilstrømme, der refereres til af ICCBased-farverum eller outputintentioner |
| PDF_RESOURCE_DEDUP_FONT_PROGRAMS | Omfatter streams, der refereres via FontFile, FontFile2 eller FontFile3 |
| PDF_RESOURCE_DEDUP_CMAPS | Medtager CMap- og ToUnicode-strømme |
| PDF_RESOURCE_DEDUP_TYPE3_CHARPROCS | Omfatter procedurestreams for Type 3-glyffer |
| PDF_RESOURCE_DEDUP_EMBEDDED_FILES | Medtager streams for integrerede filer |
| PDF_RESOURCE_DEDUP_METADATA | Medtager metadatastrømme |
| PDF_RESOURCE_DEDUP_POSTSCRIPT | Medtager PostScript-XObjects |
| PDF_RESOURCE_DEDUP_ALL_TYPES | Kombinerer alle tolv flag for ressourcetyper |
Operationsindstillinger
| PDF_RESOURCE_DEDUP_DRY_RUN | Rapporterer dublerede streams og referencer uden at ændre objektgrafen eller indsamle objekter |
|---|---|
| PDF_RESOURCE_DEDUP_GARBAGE_COLLECT | Kører mark-and-sweep-indsamling, efter at referencer er omdirigeret |
| PDF_RESOURCE_DEDUP_DEFAULT | Kombinerer alle ressourcetyper med oprydning |
Returværdier
| Positive value | Antallet af dublerede indirekte strømme, der blev konsolideret eller rapporteret af en prøvekørsel |
|---|---|
| 0 | Der blev ikke fundet nogen kvalificeret dubletstrøm, eller intet dokument er indlæst |
Bemærkninger
Det laveste objektnummer og den laveste generation i hver gruppe med nøjagtig ækvivalens bliver den kanoniske strøm, hvilket gør gentagne kørsler deterministiske
Ordbogsnøglernes rækkefølge påvirker ikke ligheden, men det gør hver semantisk nøgle og værdi, herunder identiteten af indirekte referencer; en numerisk Length-post på øverste niveau sammenlignes efter sin opløste værdi, så tilsvarende direkte og indirekte længdeformer kan dele en ressource
Ressourcer med samme afkodede indhold, men forskellige filtre eller kodede bytes forbliver adskilte, ligesom ressourcer hvis ordbøger refererer til forskellige indlejrede objekter
Alle kandidatnyttelaster hashes én gang med SHA-256, og en byte-for-byte-bekræftelse udføres kun inden for en gruppe med matchende hash og ordbogssignatur
Metoden arbejder på indirekte streams, fordi ISO 32000 kræver, at streams er indirekte objekter, og delte ressourcer repræsenteres af indirekte referencer
Brug standardindstillingen efter dokumentredigering og før en fuld lagring for straks at genvinde bytes fra dublerede objekter
Ved en trinvis lagring skal PDF_RESOURCE_DEDUP_GARBAGE_COLLECT udelades, når gamle revisioner skal forblive fysisk intakte; omdirigerede referencer reducerer stadig dubletter i den nye revision, men kan ikke fjerne byte fra tidligere revisioner
Eksempel
var
Stats: TPDFlibResourceDedupStats;
Merged: Integer;
begin
Merged:= PDF.DeduplicateResources(
PDF_RESOURCE_DEDUP_DEFAULT, Stats);
PDF.SaveToFile('optimised.pdf');
end;
Se også
TPDFlibResourceDedupStats, PurgeUnusedResources, GarbageCollectObjects