property AttachmentCount: Integer;// solo lectura
AttachmentCount enumera los flujos de archivo incrustados accesibles a través del árbol de nombres /Names /EmbeddedFiles del catálogo (especificación PDF 1.7 sección 7.11). Son archivos arbitrarios (XML, hojas de cálculo, CAD de origen, XML firmado, archivos ZIP,…) empaquetados dentro del PDF y expuestos por los visores como la barra lateral “Adjuntos”. PDF/A-3 exige específicamente que cada artefacto de origen relevante se incruste de esta forma para la reproducibilidad a largo plazo
El valor es 0 cuando Active es False y cuando el documento no lleva archivos incrustados. Las anotaciones de archivo adjunto (subtipo /FileAttachment) no se cuentan aquí — esas son anotaciones a nivel de página y aparecen a través de AnnotationCount en su lugar. PDFium Delphi Component expone los flujos incrustados como TBytes a través de Attachment[Index]; el nombre de archivo legible y el tipo estilo MIME están disponibles a través de AttachmentName[Index] y AttachmentType[Index]
El bucle típico es for I := 0 to Pdf.AttachmentCount - 1 do. Cada acceso a Attachment[I] descomprime el flujo de archivo incrustado en memoria, así que almacene en caché los TBytes si necesita escribirlos en disco y pasarlos a un analizador. Agregar o eliminar un adjunto invalida los índices — vuelva a leer AttachmentCount después de una mutación
Solo se enumera el árbol de nombres /EmbeddedFiles. Un archivo asociado de PDF 2.0 (ISO 32000-2 §7.11.4) referenciado únicamente desde un array /AF — en el catálogo, una página, una anotación o cualquier otro objeto — y no registrado además en el árbol de nombres no se cuenta y no tiene índice para Attachment, AttachmentName ni AttachmentRelationship. Esto incluye los archivos escritos por SaveAsWithAssociateFiles, que solo añade entradas /AF. La mayoría de los productores de PDF/A-3, incluidas las herramientas Factur-X y ZUGFeRD, registran cada archivo asociado en ambos sitios, así que esos archivos se listan con normalidad
FeatureSupported(feAttachment) para detectar si la compilación de PDFium instalada admite modificar los nombres de los adjuntos
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;