property AttachmentCount: Integer; // read only
AttachmentCount énumère les flux de fichiers intégrés accessibles via l’arbre de noms /Names /EmbeddedFiles du catalogue (spécification PDF 1.7, section 7.11). Ce sont des fichiers arbitraires (XML, feuilles de calcul, CAO source, XML signés, archives ZIP…) empaquetés dans le PDF et exposés par les visionneuses dans le panneau latéral « Attachments ». PDF/A-3 exige précisément que chaque artefact source pertinent soit intégré de cette manière pour une reproductibilité à long terme
La valeur est 0 lorsque Active est False et lorsque le document ne contient aucun fichier intégré. Les pièces jointes annotations (sous-type /FileAttachment) ne sont pas comptées ici — ce sont des annotations au niveau de la page et elles apparaissent via AnnotationCount à la place. PDFium Delphi Component expose les flux intégrés sous forme de TBytes via Attachment[Index] ; le nom de fichier lisible par un humain et le type de style MIME sont disponibles via AttachmentName[Index] et AttachmentType[Index]
La boucle type est for I := 0 to Pdf.AttachmentCount - 1 do. Chaque accès à Attachment[I] décompresse le flux de fichier intégré en mémoire, donc mettez en cache le TBytes si vous devez l’écrire sur disque et le passer à un analyseur. Ajouter ou supprimer une pièce jointe invalide les indices — relisez AttachmentCount après une mutation
Seul l’arbre de noms /EmbeddedFiles est énuméré. Un fichier associé
PDF 2.0 (ISO 32000-2 §7.11.4) référencé uniquement depuis un tableau
/AF — sur le catalogue, une page, une annotation ou tout autre
objet — et non également enregistré dans l’arbre de noms n’est pas compté et
n’a aucun index pour Attachment, AttachmentName ou
AttachmentRelationship. Cela vaut pour les fichiers écrits par
SaveAsWithAssociateFiles, qui
n’ajoute que des entrées /AF. La plupart des producteurs PDF/A-3,
y compris les outils Factur-X et ZUGFeRD, enregistrent chaque fichier associé aux
deux endroits, si bien que ces fichiers sont listés normalement
FeatureSupported(feAttachment) pour détecter si le build PDFium installé prend en charge la modification des noms de pièce jointe
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;