DeduplicateResources

Manipulação de documentos, Otimização

Descrição

Encontra streams de recursos indiretos byte-idênticos em todo o documento carregado, redireciona cada referência para um stream canônico determinístico e, opcionalmente, remove os objetos indiretos duplicados

A igualdade exige tanto uma assinatura independente de ordem do dicionário de stream completo quanto uma correspondência exata do payload codificado do stream, então máscaras de imagem, espaços de cor, arrays de decode, associações de conteúdo opcional, identificadores de estrutura, metadados, filtros e cada entrada semântica do dicionário permanecem parte da decisão

Sintaxe

Delphi

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

Parâmetros

OptionsUma combinação bit a bit das constantes de opção de deduplicação de recursos
StatsRecebe contadores de varredura, hashing, comparação, referência, payload, categoria e objetos órfãos

Opções de tipo de recurso

PDF_RESOURCE_DEDUP_IMAGESInclui image XObjects, máscaras de imagem explícitas, soft-mask images, imagens alternativas e miniaturas
PDF_RESOURCE_DEDUP_FORMSInclui Form XObjects como gráficos de página reutilizáveis, aparências de anotações e grupos de transparência
PDF_RESOURCE_DEDUP_PATTERNSInclui tiling patterns baseados em stream
PDF_RESOURCE_DEDUP_SHADINGSInclui mesh shadings baseados em stream
PDF_RESOURCE_DEDUP_FUNCTIONSInclui sampled function streams
PDF_RESOURCE_DEDUP_ICC_PROFILESInclui streams de perfil ICC referenciados por espaços de cor ICCBased ou output intents
PDF_RESOURCE_DEDUP_FONT_PROGRAMSInclui streams referenciados por FontFile, FontFile2 ou FontFile3
PDF_RESOURCE_DEDUP_CMAPSInclui streams CMap e ToUnicode
PDF_RESOURCE_DEDUP_TYPE3_CHARPROCSInclui streams de procedimentos de glifos Type 3
PDF_RESOURCE_DEDUP_EMBEDDED_FILESInclui streams de arquivos embutidos
PDF_RESOURCE_DEDUP_METADATAInclui streams de metadados
PDF_RESOURCE_DEDUP_POSTSCRIPTIncludes PostScript XObjects
PDF_RESOURCE_DEDUP_ALL_TYPESCombina todos os doze sinalizadores de tipo de recurso

Opções da operação

PDF_RESOURCE_DEDUP_DRY_RUNRelata streams duplicados e referências sem alterar o grafo de objetos ou coletar objetos
PDF_RESOURCE_DEDUP_GARBAGE_COLLECTExecuta coleta mark-and-sweep depois que as referências são redirecionadas
PDF_RESOURCE_DEDUP_DEFAULTCombina todos os tipos de recursos com coleta de lixo

Valores retornados

Valor positivoO número de streams indiretos duplicados consolidados ou relatados por um dry run
0Nenhum stream duplicado elegível foi encontrado ou nenhum documento está carregado

Observações

O menor número de objeto e geração em cada grupo de equivalência exata torna-se o stream canônico, tornando execuções repetidas determinísticas

A ordem das chaves do dicionário não afeta a igualdade, mas toda chave e valor semântico afeta, incluindo a identidade de referências indiretas; uma entrada Length numérica de nível superior é comparada pelo valor resolvido, então formas diretas e indiretas equivalentes de comprimento podem compartilhar um recurso

Recursos com conteúdo decodificado igual, mas filtros ou bytes codificados diferentes, permanecem separados, assim como recursos cujos dicionários referem-se a objetos aninhados diferentes

Todos os payloads candidatos passam por hash SHA-256 uma única vez, e uma confirmação byte a byte roda apenas dentro de um bucket com hash e assinatura de dicionário correspondentes

O método opera sobre streams indiretos porque a ISO 32000 exige que streams sejam objetos indiretos e recursos compartilhados são representados por referências indiretas

Use o padrão depois de editar o documento e antes de um salvamento completo para recuperar imediatamente os bytes de objetos duplicados

Para um salvamento incremental, omita PDF_RESOURCE_DEDUP_GARBAGE_COLLECT quando revisões antigas precisarem permanecer fisicamente intactas; referências redirecionadas ainda reduzem a duplicação na nova revisão, mas não conseguem remover bytes de revisões anteriores

Exemplo

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

Veja também

TPDFlibResourceDedupStats, PurgeUnusedResources, GarbageCollectObjects