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
| Options | Uma combinação bit a bit de constantes de opções de desduplicação de recursos |
|---|---|
| Stats | Recebe 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_IMAGES | Inclui Image XObjects, máscaras de imagem explícitas, imagens de máscara suave, 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 padrões de mosaico baseados em fluxos |
| PDF_RESOURCE_DEDUP_SHADINGS | Inclui sombreados de malha baseados em fluxos |
| PDF_RESOURCE_DEDUP_FUNCTIONS | Inclui fluxos de funções amostradas |
| PDF_RESOURCE_DEDUP_ICC_PROFILES | Inclui fluxos de perfis ICC referenciados por espaços de cor ICCBased ou intenções de saída |
| PDF_RESOURCE_DEDUP_FONT_PROGRAMS | Inclui fluxos referenciados através de FontFile, FontFile2 ou FontFile3 |
| PDF_RESOURCE_DEDUP_CMAPS | Inclui fluxos CMap e ToUnicode |
| PDF_RESOURCE_DEDUP_TYPE3_CHARPROCS | Inclui fluxos de procedimentos de glifos Type 3 |
| PDF_RESOURCE_DEDUP_EMBEDDED_FILES | Inclui fluxos de ficheiros incorporados |
| PDF_RESOURCE_DEDUP_METADATA | Inclui fluxos de metadados |
| PDF_RESOURCE_DEDUP_POSTSCRIPT | Inclui PostScript XObjects |
| PDF_RESOURCE_DEDUP_ALL_TYPES | Combina os doze sinalizadores de tipos de recursos |
Opções da operação
| PDF_RESOURCE_DEDUP_DRY_RUN | Comunica fluxos e referências duplicados sem alterar o grafo de objetos nem recolher objetos |
|---|---|
| PDF_RESOURCE_DEDUP_GARBAGE_COLLECT | Executa a recolha por marcação e varrimento depois de as referências serem redirecionadas |
| PDF_RESOURCE_DEDUP_DEFAULT | Combina todos os tipos de recursos com a recolha de lixo |
Valores devolvidos
| Positive value | O número de fluxos indiretos duplicados consolidados ou comunicados por uma execução de simulação |
|---|---|
| 0 | Nã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