DeduplicateResources

Manipulación de documentos, optimización

Descripción

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

La igualdad requiere una firma independiente del orden del diccionario completo de flujo y una coincidencia exacta de la carga útil codificada, por lo que máscaras de imagen, espacios de color, matrices de decodificación, asociaciones de contenido opcional, identificadores estructurales, metadatos, filtros y toda entrada semántica siguen siendo parte de la decisión

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 constantes de opciones de desduplicación de recursos
StatsRecibe contadores de análisis, hash, comparación, referencia, carga útil, categoría y objetos huérfanos

Opciones del tipo de recurso

PDF_RESOURCE_DEDUP_IMAGESIncluye XObjects 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 los flujos de perfiles ICC referenciados por espacios de color ICCBased o intenciones de salida
PDF_RESOURCE_DEDUP_FONT_PROGRAMSIncluye flujos a los que hacen referencia FontFile, FontFile2 o FontFile3
PDF_RESOURCE_DEDUP_CMAPSIncluye flujos CMap y ToUnicode
PDF_RESOURCE_DEDUP_TYPE3_CHARPROCSIncluye flujos de procedimiento 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 las doce marcas de tipo de recurso

Opciones de la operación

PDF_RESOURCE_DEDUP_DRY_RUNInforma flujos y referencias duplicados sin modificar el grafo de objetos ni recopilar objetos
PDF_RESOURCE_DEDUP_GARBAGE_COLLECTEjecuta la recolección de marcado y barrido después de redirigir las referencias
PDF_RESOURCE_DEDUP_DEFAULTCombina todos los tipos de recursos con recolección de basura

Valores devueltos

Positive valueEl número de flujos indirectos duplicados consolidados o informados por una ejecución en seco
0No se encontró ningún flujo duplicado apto o no hay ningún documento cargado

Observaciones

El número y la generación de objeto 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 la igualdad, pero sí cada clave y valor semánticos, incluida la identidad de referencia indirecta; una entrada Length numérica de nivel superior se compara por su valor resuelto para que las formas de longitud directa e indirecta equivalentes puedan compartir un recurso

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

Todas las cargas candidatas se someten una vez a hash SHA-256, y una confirmación byte por byte solo se ejecuta dentro de un grupo coincidente de hash y firma de diccionario

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

Use el valor predeterminado después de editar el documento y antes de un guardado completo para recuperar inmediatamente 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 aún reducen la duplicación en la revisión nueva, 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