property Attachment[Index: Integer]: TBytes;
PDF-documenten kunnen willekeurige hulpbestanden meedragen (bronspreadsheets, originele Word-documenten, bijgevoegde facturen, ondertekende XML-payloads, ZIP-bundels, zelfs andere PDF's) in een container op documentniveau die de EmbeddedFiles-naamboom heet. Elke vermelding is een PDF file specification-dictionary waarvan de stream de werkelijke bytes van het bijgevoegde bestand bevat. PDFium Delphi Component stelt die boom bloot als een vlakke, op nul gebaseerde index van 0 tot AttachmentCount - 1
Het lezen van Attachment[Index] geeft de gedecodeerde byte-inhoud van het bijgevoegde bestand terug als een TBytes-array — precies de bytes die elke andere PDF-lezer zou extraheren wanneer de gebruiker op het paperclipje klikt en de bijlage opslaat. De teruggegeven bytes zijn al gedecomprimeerd; u kunt ze rechtstreeks naar schijf schrijven, naar een stream sturen of ze terugvoeren aan een andere TPdf-instantie als de bijlage zelf een PDF is
Schrijven vervangt de bestandsstream van een bestaand bijlage-slot ter plekke. Het slot moet al bestaan; gebruik eerst CreateAttachment als u een nieuwe vermelding nodig heeft. Schrijfbewerkingen worden in het geheugen gebufferd en worden pas definitief nadat het document met SaveAs is opgeslagen
| Index | Integer. Op nul gebaseerde positie in de EmbeddedFiles-naamboom. Moet voldoen aan 0 <= Index < AttachmentCount. De indexen komen overeen met die van AttachmentName en AttachmentType, dus een lus over 0..AttachmentCount - 1 bezoekt elke bijlage precies één keer |
TBytes-array gelezen — meet de geheugendruk voordat u in een korte lus tientallen payloads van meerdere megabytes leestAttachment[Index] vergroot of verkleint de EmbeddedFiles-boom nooit; het vervangt alleen streambytes. Gebruik DeleteAttachment om een vermelding te verwijderen
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;