property Attachment[Index: Integer]: TBytes;
Les documents PDF peuvent porter des fichiers auxiliaires arbitraires (feuilles de calcul source, documents Word d’origine, factures jointes, charges utiles XML signées, bundles ZIP, même d’autres PDF) dans un conteneur au niveau document appelé arbre de noms EmbeddedFiles. Chaque entrée est un dictionnaire de spécification de fichier PDF dont le flux contient les octets réels du fichier joint. PDFium Delphi Component expose cet arbre comme un index plat de base 0 de 0 à AttachmentCount - 1
La lecture de Attachment[Index] renvoie le contenu en octets décodé du fichier attaché sous la forme d’un tableau TBytes — exactement les octets que n’importe quel autre lecteur PDF extrairait quand l’utilisateur clique sur l’icône de trombone et enregistre la pièce jointe. Les octets renvoyés sont déjà décompressés ; vous pouvez les écrire directement sur disque, les pousser vers un flux ou les fournir à une autre instance de TPdf si la pièce jointe est elle-même un PDF
L’écriture remplace sur place le flux de fichier d’un emplacement de pièce jointe existant. L’emplacement doit déjà exister ; utilisez CreateAttachment d’abord si vous devez ajouter une nouvelle entrée. Les écritures sont tamponnées en mémoire et ne deviennent persistantes qu’après l’enregistrement du document avec SaveAs
| Index | Integer. Position de base 0 dans l’arbre de noms EmbeddedFiles. Doit satisfaire 0 <= Index < AttachmentCount. Les index correspondent à ceux rapportés par AttachmentName et AttachmentType, donc itérer 0..AttachmentCount - 1 visite chaque pièce jointe exactement une fois |
TBytes en une seule allocation — mesurez la pression mémoire avant de lire des dizaines de charges utiles de plusieurs mégaoctets dans une boucle serréeAttachment[Index] ne redimensionne jamais l’arbre EmbeddedFiles ; il ne remplace que les octets de flux. Pour supprimer une entrée, utilisez DeleteAttachment
var
I: Integer;
Data: TBytes;
OutPath: string;
begin
Pdf1.LoadFromFile('with-attachments.pdf');
for I := 0 to Pdf1.AttachmentCount - 1 do
begin
Data := Pdf1.Attachment[I];
OutPath := 'extracted\' + Pdf1.AttachmentName[I];
TFile.WriteAllBytes(OutPath, Data);
Memo1.Lines.Add(Format('%s (%s, %d bytes)',
[Pdf1.AttachmentName[I], Pdf1.AttachmentType[I], Length(Data)]));
end;
end;