DeduplicateResources
Manipolazione dei documenti, ottimizzazione
Descrizione
Individua nell'intero documento caricato i flussi di risorse indiretti identici a livello di byte, reindirizza ogni riferimento a un flusso canonico deterministico e rimuove facoltativamente gli oggetti indiretti duplicati
L'uguaglianza richiede sia una firma indipendente dall'ordine dell'intero dizionario del flusso sia una corrispondenza esatta del payload codificato; maschere, spazi colore, array di decodifica, associazioni di contenuto facoltativo, identificatori strutturali, metadati, filtri e ogni voce semantica partecipano alla decisione
Sintassi
Delphi
Function TPDFlib.DeduplicateResources(
Options: Integer= PDF_RESOURCE_DEDUP_DEFAULT): Integer; Overload;
Function TPDFlib.DeduplicateResources(Options: Integer;
Out Stats: TPDFlibResourceDedupStats): Integer; Overload;
Parametri
| Options | Una combinazione bit per bit delle costanti di opzione per la deduplicazione delle risorse |
|---|---|
| Stats | Riceve i contatori di scansione, hashing, confronto, riferimenti, payload, categorie e oggetti orfani |
Opzioni del tipo di risorsa
| PDF_RESOURCE_DEDUP_IMAGES | Include XObject immagine, maschere esplicite, immagini maschera morbida, immagini alternative e miniature |
|---|---|
| PDF_RESOURCE_DEDUP_FORMS | Include Form XObject quali grafica riutilizzabile, aspetti delle annotazioni e gruppi di trasparenza |
| PDF_RESOURCE_DEDUP_PATTERNS | Include pattern di riempimento basati su stream |
| PDF_RESOURCE_DEDUP_SHADINGS | Include sfumature mesh basate su stream |
| PDF_RESOURCE_DEDUP_FUNCTIONS | Include gli stream di funzioni campionate |
| PDF_RESOURCE_DEDUP_ICC_PROFILES | Include i flussi dei profili ICC referenziati da spazi colore ICCBased o intenti di output |
| PDF_RESOURCE_DEDUP_FONT_PROGRAMS | Include i flussi a cui si fa riferimento tramite FontFile, FontFile2 o FontFile3 |
| PDF_RESOURCE_DEDUP_CMAPS | Include stream CMap e ToUnicode |
| PDF_RESOURCE_DEDUP_TYPE3_CHARPROCS | Include stream delle procedure dei glifi Type 3 |
| PDF_RESOURCE_DEDUP_EMBEDDED_FILES | Include gli stream dei file incorporati |
| PDF_RESOURCE_DEDUP_METADATA | Include gli stream dei metadati |
| PDF_RESOURCE_DEDUP_POSTSCRIPT | Include gli XObject PostScript |
| PDF_RESOURCE_DEDUP_ALL_TYPES | Combina tutti i dodici flag dei tipi di risorsa |
Opzioni dell'operazione
| PDF_RESOURCE_DEDUP_DRY_RUN | Segnala flussi e riferimenti duplicati senza modificare il grafo degli oggetti né raccogliere oggetti |
|---|---|
| PDF_RESOURCE_DEDUP_GARBAGE_COLLECT | Esegue la raccolta mark-and-sweep dopo il reindirizzamento dei riferimenti |
| PDF_RESOURCE_DEDUP_DEFAULT | Combina tutti i tipi di risorse con la raccolta dei rifiuti |
Valori restituiti
| Positive value | Numero di flussi indiretti duplicati consolidati o segnalati da un'esecuzione di prova |
|---|---|
| 0 | Nessun flusso duplicato idoneo trovato oppure nessun documento caricato |
Note
Il numero di oggetto e la generazione più bassi in ogni gruppo di equivalenza esatta diventano lo stream canonico, rendendo deterministiche le esecuzioni ripetute
L'ordine delle chiavi non influisce sull'uguaglianza, ma ogni chiave e valore semantico sì, inclusa l'identità dei riferimenti. Una Length numerica viene confrontata per valore risolto, consentendo condivisione tra forme dirette e indirette equivalenti
Risorse con contenuto decodificato uguale ma filtri o byte codificati diversi restano separate, come dizionari riferiti a oggetti annidati diversi
Tutti i payload candidati vengono sottoposti una volta a SHA-256 e il confronto byte per byte avviene soltanto nei bucket con hash e firma dizionario corrispondenti
Il metodo opera su stream indiretti perché ISO 32000 richiede oggetti stream indiretti e le risorse condivise sono riferimenti indiretti
Usare il valore predefinito dopo la modifica e prima di un salvataggio completo per recuperare subito i byte duplicati
In un salvataggio incrementale omettere PDF_RESOURCE_DEDUP_GARBAGE_COLLECT se le revisioni precedenti devono restare fisicamente intatte; i riferimenti riducono comunque i duplicati nella nuova revisione
Esempio
var
Stats: TPDFlibResourceDedupStats;
Merged: Integer;
begin
Merged:= PDF.DeduplicateResources(
PDF_RESOURCE_DEDUP_DEFAULT, Stats);
PDF.SaveToFile('optimised.pdf');
end;
Vedere anche
TPDFlibResourceDedupStats, PurgeUnusedResources, GarbageCollectObjects