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
| Options | Una combinación bit a bit de las constantes de opciones de desduplicación de recursos |
|---|---|
| Stats | Recibe 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_IMAGES | Incluye XObject de imagen, máscaras de imagen explícitas, imágenes de máscara suave, imágenes alternativas y miniaturas |
|---|---|
| PDF_RESOURCE_DEDUP_FORMS | Incluye Form XObjects como gráficos de página reutilizables, apariencias de anotaciones y grupos de transparencia |
| PDF_RESOURCE_DEDUP_PATTERNS | Incluye patrones de mosaico basados en flujos |
| PDF_RESOURCE_DEDUP_SHADINGS | Incluye sombreados de malla basados en flujos |
| PDF_RESOURCE_DEDUP_FUNCTIONS | Incluye flujos de funciones muestreadas |
| PDF_RESOURCE_DEDUP_ICC_PROFILES | Incluye flujos de perfiles ICC a los que hacen referencia espacios de color ICCBased o condiciones de salida |
| PDF_RESOURCE_DEDUP_FONT_PROGRAMS | Incluye flujos referenciados mediante FontFile, FontFile2 o FontFile3 |
| PDF_RESOURCE_DEDUP_CMAPS | Incluye flujos CMap y ToUnicode |
| PDF_RESOURCE_DEDUP_TYPE3_CHARPROCS | Incluye flujos de procedimientos de glifos Type 3 |
| PDF_RESOURCE_DEDUP_EMBEDDED_FILES | Incluye flujos de archivos incrustados |
| PDF_RESOURCE_DEDUP_METADATA | Incluye flujos de metadatos |
| PDF_RESOURCE_DEDUP_POSTSCRIPT | Incluye XObjects PostScript |
| PDF_RESOURCE_DEDUP_ALL_TYPES | Combina los doce indicadores de tipo de recurso |
Opciones de operación
| PDF_RESOURCE_DEDUP_DRY_RUN | Notifica flujos y referencias duplicados sin modificar el grafo de objetos ni recopilar objetos |
|---|---|
| PDF_RESOURCE_DEDUP_GARBAGE_COLLECT | Ejecuta una recopilación por marcado y barrido después de redirigir las referencias |
| PDF_RESOURCE_DEDUP_DEFAULT | Combina todos los tipos de recursos con recopilación de elementos no utilizados |
Valores devueltos
| Positive value | El número de flujos indirectos duplicados consolidados o indicados por una ejecución de prueba |
|---|---|
| 0 | No 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