property Attachment[Index: Integer]: TBytes;
PDF-Dokumente können beliebige Zusatzdateien (Quell-Tabellen, originale Word-Dokumente, angehängte Rechnungen, signierte XML-Payloads, ZIP-Bündel, sogar andere PDFs) in einem Container auf Dokumentebene tragen, dem sogenannten EmbeddedFiles-Name-Tree. Jeder Eintrag ist ein PDF-File-Specification-Dictionary, dessen Stream die tatsächlichen Bytes der angehängten Datei hält. PDFium Delphi Component legt diesen Baum als flachen 0-basierten Index von 0 bis AttachmentCount - 1 offen
Das Lesen von Attachment[Index] liefert den dekodierten Byteinhalt der angehängten Datei als TBytes-Array — genau die Bytes, die jeder andere PDF-Reader extrahieren würde, wenn der Nutzer auf die Büroklammer klickt und den Anhang speichert. Die zurückgegebenen Bytes sind bereits dekomprimiert; Sie können sie direkt auf die Platte schreiben, in einen Stream pushen oder in eine andere TPdf-Instanz einspeisen, falls der Anhang selbst ein PDF ist
Das Schreiben ersetzt den Datei-Stream eines vorhandenen Attachment-Slots an Ort und Stelle. Der Slot muss bereits existieren; verwenden Sie zuerst CreateAttachment, wenn Sie einen neuen Eintrag anlegen wollen. Schreibvorgänge werden im Speicher gepuffert und werden erst persistent, wenn das Dokument mit SaveAs gespeichert wird
| Index | Integer. 0-basierte Position im EmbeddedFiles-Name-Tree. Muss 0 <= Index < AttachmentCount erfüllen. Die Indizes stimmen mit denen von AttachmentName und AttachmentType überein, sodass ein Lauf über 0..AttachmentCount - 1 jeden Anhang genau einmal besucht |
TBytes-Array gelesen — messen Sie den Speicherdruck, bevor Sie Dutzende mehrfach-Megabyte-Payloads in einer engen Schleife lesenAttachment[Index] ändert nie die Größe des EmbeddedFiles-Baums; es ersetzt nur die Stream-Bytes. Zum Entfernen eines Eintrags verwenden Sie 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;