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
| Options | Una combinación bit a bit de constantes de opciones de desduplicación de recursos |
|---|---|
| Stats | Recibe contadores de análisis, hash, comparación, referencia, carga útil, categoría y objetos huérfanos |
Opciones del tipo de recurso
| PDF_RESOURCE_DEDUP_IMAGES | Incluye XObjects 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 los flujos de perfiles ICC referenciados por espacios de color ICCBased o intenciones de salida |
| PDF_RESOURCE_DEDUP_FONT_PROGRAMS | Incluye flujos a los que hacen referencia FontFile, FontFile2 o FontFile3 |
| PDF_RESOURCE_DEDUP_CMAPS | Incluye flujos CMap y ToUnicode |
| PDF_RESOURCE_DEDUP_TYPE3_CHARPROCS | Incluye flujos de procedimiento 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 las doce marcas de tipo de recurso |
Opciones de la operación
| PDF_RESOURCE_DEDUP_DRY_RUN | Informa flujos y referencias duplicados sin modificar el grafo de objetos ni recopilar objetos |
|---|---|
| PDF_RESOURCE_DEDUP_GARBAGE_COLLECT | Ejecuta la recolección de marcado y barrido después de redirigir las referencias |
| PDF_RESOURCE_DEDUP_DEFAULT | Combina todos los tipos de recursos con recolección de basura |
Valores devueltos
| Positive value | El número de flujos indirectos duplicados consolidados o informados por una ejecución en seco |
|---|---|
| 0 | No 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