DeduplicateResources

Manipulación de documentos, optimización

Descripción

Busca en todo el documento cargado flujos de recursos indirectos idénticos byte por byte, redirige cada referencia a un flujo canónico determinista y, opcionalmente, elimina los objetos indirectos duplicados

La igualdad exige firma independiente del orden de todo el diccionario y coincidencia exacta de la carga codificada, conservando máscaras, espacios, matrices, asociaciones, metadatos, filtros y semántica

Sintaxis

Delphi

Function TPDFlib.DeduplicateResources(
  Options: Integer= PDF_RESOURCE_DEDUP_DEFAULT): Integer; Overload;
Function TPDFlib.DeduplicateResources(Options: Integer;
  Out Stats: TPDFlibResourceDedupStats): Integer; Overload;

Parámetros

OptionsUna combinación bit a bit de las constantes de opciones de desduplicación de recursos
StatsRecibe contadores de análisis, cálculo de hash, comparación, referencias, cargas, categorías y objetos huérfanos

Opciones de tipo de recurso

PDF_RESOURCE_DEDUP_IMAGESIncluye XObject de imagen, máscaras de imagen explícitas, imágenes de máscara suave, imágenes alternativas y miniaturas
PDF_RESOURCE_DEDUP_FORMSIncluye Form XObjects como gráficos de página reutilizables, apariencias de anotaciones y grupos de transparencia
PDF_RESOURCE_DEDUP_PATTERNSIncluye patrones de mosaico basados en flujos
PDF_RESOURCE_DEDUP_SHADINGSIncluye sombreados de malla basados en flujos
PDF_RESOURCE_DEDUP_FUNCTIONSIncluye flujos de funciones muestreadas
PDF_RESOURCE_DEDUP_ICC_PROFILESIncluye flujos de perfiles ICC a los que hacen referencia espacios de color ICCBased o condiciones de salida
PDF_RESOURCE_DEDUP_FONT_PROGRAMSIncluye flujos referenciados mediante FontFile, FontFile2 o FontFile3
PDF_RESOURCE_DEDUP_CMAPSIncluye flujos CMap y ToUnicode
PDF_RESOURCE_DEDUP_TYPE3_CHARPROCSIncluye flujos de procedimientos de glifos Type 3
PDF_RESOURCE_DEDUP_EMBEDDED_FILESIncluye flujos de archivos incrustados
PDF_RESOURCE_DEDUP_METADATAIncluye flujos de metadatos
PDF_RESOURCE_DEDUP_POSTSCRIPTIncluye XObjects PostScript
PDF_RESOURCE_DEDUP_ALL_TYPESCombina los doce indicadores de tipo de recurso

Opciones de operación

PDF_RESOURCE_DEDUP_DRY_RUNNotifica flujos y referencias duplicados sin modificar el grafo de objetos ni recopilar objetos
PDF_RESOURCE_DEDUP_GARBAGE_COLLECTEjecuta una recopilación por marcado y barrido después de redirigir las referencias
PDF_RESOURCE_DEDUP_DEFAULTCombina todos los tipos de recursos con recopilación de elementos no utilizados

Valores devueltos

Positive valueEl número de flujos indirectos duplicados consolidados o indicados por una ejecución de prueba
0No se ha encontrado ningún flujo duplicado apto o no hay ningún documento cargado

Observaciones

El número de objeto y la generación más bajos de cada grupo de equivalencia exacta se convierten en el flujo canónico, lo que hace deterministas las ejecuciones repetidas

El orden de las claves del diccionario no afecta a la igualdad, pero sí cada clave y valor semánticos, incluida la identidad de referencias indirectas; una entrada Length numérica de nivel superior se compara por su valor resuelto, de modo que las formas de longitud directa e indirecta equivalentes puedan compartir un recurso

Los recursos con el mismo contenido descodificado pero distintos filtros o bytes codificados permanecen separados, al igual que los recursos cuyos diccionarios hacen referencia a objetos anidados distintos

Todas las cargas candidatas se procesan una vez con SHA-256 y solo se confirma byte a byte dentro de un grupo con hash y firma de diccionario coincidentes

El método opera sobre flujos indirectos porque ISO 32000 exige que los flujos sean objetos indirectos y los recursos compartidos se representan mediante referencias indirectas

Utilice el valor predeterminado después de editar el documento y antes de guardarlo por completo para recuperar inmediatamente los bytes de objetos duplicados

Para un guardado incremental, omita PDF_RESOURCE_DEDUP_GARBAGE_COLLECT cuando las revisiones antiguas deban permanecer físicamente intactas; las referencias redirigidas siguen reduciendo la duplicación en la nueva revisión, pero no pueden eliminar bytes de revisiones anteriores

Ejemplo

var
  Stats: TPDFlibResourceDedupStats;
  Merged: Integer;
begin
  Merged:= PDF.DeduplicateResources(
    PDF_RESOURCE_DEDUP_DEFAULT, Stats);
  PDF.SaveToFile('optimised.pdf');
end;

Véase también

TPDFlibResourceDedupStats, PurgeUnusedResources, GarbageCollectObjects