DeduplicateResources

Manipulação de documentos, Otimização

Descrição

Localiza fluxos indiretos de recursos com bytes idênticos em todo o documento carregado, redireciona todas as referências para um fluxo canónico determinístico e, opcionalmente, remove os objetos indiretos duplicados

A igualdade exige uma assinatura independente da ordem do dicionário de fluxo completo e uma correspondência exata da carga útil codificada do fluxo, pelo que as máscaras de imagem, espaços de cor, matrizes de descodificação, associações de conteúdo opcional, identificadores de estrutura, metadados, filtros e todas as entradas semânticas do dicionário continuam a fazer 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 de constantes de opções de desduplicação de recursos
StatsRecebe contadores de análise, hashing, comparação, referências, cargas úteis, categorias e objetos órfãos

Opções do tipo de recurso

PDF_RESOURCE_DEDUP_IMAGESInclui Image XObjects, máscaras de imagem explícitas, imagens de máscara suave, 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 padrões de mosaico baseados em fluxos
PDF_RESOURCE_DEDUP_SHADINGSInclui sombreados de malha baseados em fluxos
PDF_RESOURCE_DEDUP_FUNCTIONSInclui fluxos de funções amostradas
PDF_RESOURCE_DEDUP_ICC_PROFILESInclui fluxos de perfis ICC referenciados por espaços de cor ICCBased ou intenções de saída
PDF_RESOURCE_DEDUP_FONT_PROGRAMSInclui fluxos referenciados através de FontFile, FontFile2 ou FontFile3
PDF_RESOURCE_DEDUP_CMAPSInclui fluxos CMap e ToUnicode
PDF_RESOURCE_DEDUP_TYPE3_CHARPROCSInclui fluxos de procedimentos de glifos Type 3
PDF_RESOURCE_DEDUP_EMBEDDED_FILESInclui fluxos de ficheiros incorporados
PDF_RESOURCE_DEDUP_METADATAInclui fluxos de metadados
PDF_RESOURCE_DEDUP_POSTSCRIPTInclui PostScript XObjects
PDF_RESOURCE_DEDUP_ALL_TYPESCombina os doze sinalizadores de tipos de recursos

Opções da operação

PDF_RESOURCE_DEDUP_DRY_RUNComunica fluxos e referências duplicados sem alterar o grafo de objetos nem recolher objetos
PDF_RESOURCE_DEDUP_GARBAGE_COLLECTExecuta a recolha por marcação e varrimento depois de as referências serem redirecionadas
PDF_RESOURCE_DEDUP_DEFAULTCombina todos os tipos de recursos com a recolha de lixo

Valores devolvidos

Positive valueO número de fluxos indiretos duplicados consolidados ou comunicados por uma execução de simulação
0Não foi encontrado qualquer fluxo duplicado elegível ou nenhum documento está carregado

Observações

O menor número de objeto e geração de cada grupo de equivalência exata torna-se o fluxo canónico, fazendo com que execuções repetidas sejam determinísticas

A ordem das chaves do dicionário não afeta a igualdade, mas todas as chaves e valores semânticos a afetam, incluindo a identidade das referências indiretas; uma entrada Length numérica de nível superior é comparada pelo respetivo valor resolvido, para que formas de comprimento diretas e indiretas equivalentes possam partilhar um recurso

Os recursos com conteúdo descodificado igual, mas com filtros ou bytes codificados diferentes, permanecem separados, tal como os recursos cujos dicionários referenciam objetos aninhados diferentes

Todas as cargas úteis candidatas são submetidas uma vez a hash com SHA-256, e só é efetuada uma confirmação byte a byte num agrupamento com hash e assinatura de dicionário correspondentes

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

Utilize a predefinição após editar o documento e antes duma gravação completa para recuperar imediatamente bytes de objetos duplicados

Para uma gravação incremental, omita PDF_RESOURCE_DEDUP_GARBAGE_COLLECT quando as revisões antigas tiverem de permanecer fisicamente intactas; as referências redirecionadas continuam a reduzir a duplicação na nova revisão, mas não podem 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;

Consulte também

TPDFlibResourceDedupStats, PurgeUnusedResources, GarbageCollectObjects