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
| Options | Uma combinação bit a bit das constantes de opção de deduplicação de recursos |
|---|---|
| Stats | Recebe contadores de varredura, hashing, comparação, referência, payload, categoria e objetos órfãos |
Opções de tipo de recurso
| PDF_RESOURCE_DEDUP_IMAGES | Inclui image XObjects, máscaras de imagem explícitas, soft-mask images, imagens alternativas e miniaturas |
|---|---|
| PDF_RESOURCE_DEDUP_FORMS | Inclui Form XObjects como gráficos de página reutilizáveis, aparências de anotações e grupos de transparência |
| PDF_RESOURCE_DEDUP_PATTERNS | Inclui tiling patterns baseados em stream |
| PDF_RESOURCE_DEDUP_SHADINGS | Inclui mesh shadings baseados em stream |
| PDF_RESOURCE_DEDUP_FUNCTIONS | Inclui sampled function streams |
| PDF_RESOURCE_DEDUP_ICC_PROFILES | Inclui streams de perfil ICC referenciados por espaços de cor ICCBased ou output intents |
| PDF_RESOURCE_DEDUP_FONT_PROGRAMS | Inclui streams referenciados por FontFile, FontFile2 ou FontFile3 |
| PDF_RESOURCE_DEDUP_CMAPS | Inclui streams CMap e ToUnicode |
| PDF_RESOURCE_DEDUP_TYPE3_CHARPROCS | Inclui streams de procedimentos de glifos Type 3 |
| PDF_RESOURCE_DEDUP_EMBEDDED_FILES | Inclui streams de arquivos embutidos |
| PDF_RESOURCE_DEDUP_METADATA | Inclui streams de metadados |
| PDF_RESOURCE_DEDUP_POSTSCRIPT | Includes PostScript XObjects |
| PDF_RESOURCE_DEDUP_ALL_TYPES | Combina todos os doze sinalizadores de tipo de recurso |
Opções da operação
| PDF_RESOURCE_DEDUP_DRY_RUN | Relata streams duplicados e referências sem alterar o grafo de objetos ou coletar objetos |
|---|---|
| PDF_RESOURCE_DEDUP_GARBAGE_COLLECT | Executa coleta mark-and-sweep depois que as referências são redirecionadas |
| PDF_RESOURCE_DEDUP_DEFAULT | Combina todos os tipos de recursos com coleta de lixo |
Valores retornados
| Valor positivo | O número de streams indiretos duplicados consolidados ou relatados por um dry run |
|---|---|
| 0 | Nenhum 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