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

OptionsUna combinazione bit per bit delle costanti di opzione per la deduplicazione delle risorse
StatsRiceve i contatori di scansione, hashing, confronto, riferimenti, payload, categorie e oggetti orfani

Opzioni del tipo di risorsa

PDF_RESOURCE_DEDUP_IMAGESInclude XObject immagine, maschere esplicite, immagini maschera morbida, immagini alternative e miniature
PDF_RESOURCE_DEDUP_FORMSInclude Form XObject quali grafica riutilizzabile, aspetti delle annotazioni e gruppi di trasparenza
PDF_RESOURCE_DEDUP_PATTERNSInclude pattern di riempimento basati su stream
PDF_RESOURCE_DEDUP_SHADINGSInclude sfumature mesh basate su stream
PDF_RESOURCE_DEDUP_FUNCTIONSInclude gli stream di funzioni campionate
PDF_RESOURCE_DEDUP_ICC_PROFILESInclude i flussi dei profili ICC referenziati da spazi colore ICCBased o intenti di output
PDF_RESOURCE_DEDUP_FONT_PROGRAMSInclude i flussi a cui si fa riferimento tramite FontFile, FontFile2 o FontFile3
PDF_RESOURCE_DEDUP_CMAPSInclude stream CMap e ToUnicode
PDF_RESOURCE_DEDUP_TYPE3_CHARPROCSInclude stream delle procedure dei glifi Type 3
PDF_RESOURCE_DEDUP_EMBEDDED_FILESInclude gli stream dei file incorporati
PDF_RESOURCE_DEDUP_METADATAInclude gli stream dei metadati
PDF_RESOURCE_DEDUP_POSTSCRIPTInclude gli XObject PostScript
PDF_RESOURCE_DEDUP_ALL_TYPESCombina tutti i dodici flag dei tipi di risorsa

Opzioni dell'operazione

PDF_RESOURCE_DEDUP_DRY_RUNSegnala flussi e riferimenti duplicati senza modificare il grafo degli oggetti né raccogliere oggetti
PDF_RESOURCE_DEDUP_GARBAGE_COLLECTEsegue la raccolta mark-and-sweep dopo il reindirizzamento dei riferimenti
PDF_RESOURCE_DEDUP_DEFAULTCombina tutti i tipi di risorse con la raccolta dei rifiuti

Valori restituiti

Positive valueNumero di flussi indiretti duplicati consolidati o segnalati da un'esecuzione di prova
0Nessun 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