PDFium Delphi Component Docs

AttachmentCount propriedade

Componente: TPdf  ·  Unidade: PDFium
Número de anexos de arquivo incorporados declarados no documento.

Syntax

property AttachmentCount: Integer; // read only

Description

AttachmentCount enumera os fluxos de arquivo incorporados acessíveis através da árvore de nomes do catálogo /Names /EmbeddedFiles (especificação PDF 1.7 seção 7.11). Estes são arquivos arbitrários (XML, planilhas, CAD fonte, XML assinado, arquivos ZIP,…) empacotados dentro do PDF e expostos pelos visualizadores como a barra lateral “Attachments”. PDF/A-3 especificamente requer que todo artefato fonte relevante seja incorporado desta forma para reprodutibilidade de longo prazo.

O valor é 0 quando Active é False e quando o documento não possui arquivos incorporados. Anotações de anexo de arquivo (subtipo /FileAttachment) não são contadas aqui — estas são anotações de nível de página e aparecem através de AnnotationCount. O PDFium Delphi Component expõe fluxos incorporados como TBytes via Attachment[Index]; o nome de arquivo legível e o tipo MIME estão disponíveis através de AttachmentName[Index] e AttachmentType[Index].

O loop típico é for I := 0 to Pdf.AttachmentCount - 1 do. Cada acesso a Attachment[I] descomprime o fluxo de arquivo incorporado na memória, então armazene em cache o TBytes se precisar gravá-lo em disco e passá-lo a um analisador. Adicionar ou remover um anexo invalida índices — releia AttachmentCount após uma mutação

Apenas a árvore de nomes /EmbeddedFiles é enumerada. Um associated file do PDF 2.0 (ISO 32000-2 §7.11.4) referenciado somente por um array /AF — no catálogo, em uma página, em uma anotação ou em qualquer outro objeto — e que também não esteja registrado na árvore de nomes não é contado e não tem índice para Attachment, AttachmentName ou AttachmentRelationship. Isso inclui arquivos gravados por SaveAsWithAssociateFiles, que adiciona apenas entradas /AF. A maioria dos produtores de PDF/A-3, incluindo ferramentas Factur-X e ZUGFeRD, registra cada associated file nos dois lugares, então esses arquivos são listados normalmente

Remarks

Example

var I: Integer;
var Data: TBytes;
for I := 0 to Pdf1.AttachmentCount - 1 do
begin
  Data := Pdf1.Attachment[I];
  TFile.WriteAllBytes(Pdf1.AttachmentName[I], Data);
end;

See Also

Attachment, AttachmentName, AttachmentType, AnnotationCount