property Attachment[Index: Integer]: TBytes;
I documenti PDF possono trasportare file ausiliari arbitrari (fogli di calcolo sorgente, documenti Word originali, fatture allegate, payload XML firmati, bundle ZIP, persino altri PDF) dentro un contenitore a livello di documento chiamato name tree EmbeddedFiles. Ogni voce è un dizionario file specification PDF il cui stream contiene i byte effettivi del file allegato. PDFium Delphi Component espone quell'albero come indice piatto a base zero da 0 a AttachmentCount - 1
Leggere Attachment[Index] restituisce il contenuto in byte decodificato del file allegato come array TBytes — esattamente i byte che qualsiasi altro lettore PDF estraierebbe quando l'utente fa clic sull'icona della graffetta e salva l'allegato. I byte restituiti sono già decompressi; puoi scriverli direttamente su disco, inviarli a uno stream o reinserirli in un'altra istanza TPdf se l'allegato è a sua volta un PDF
La scrittura sostituisce in place lo stream del file di uno slot di allegato esistente. Lo slot deve già esistere; usa prima CreateAttachment se devi aggiungere una nuova voce. Le scritture vengono bufferizzate in memoria e diventano definitive solo dopo il salvataggio del documento con SaveAs
| Index | Integer. Posizione a base zero nell'albero dei nomi EmbeddedFiles. Deve soddisfare 0 <= Index < AttachmentCount. Gli indici corrispondono a quelli riportati da AttachmentName e AttachmentType, così iterare 0..AttachmentCount - 1 visita ogni allegato esattamente una volta |
TBytes con un'unica allocazione — misura la pressione di memoria prima di leggere decine di payload di diversi megabyte in un ciclo serratoAttachment[Index] non ridimensiona mai l'albero EmbeddedFiles; sostituisce solo i byte dello stream. Per rimuovere una voce usa 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;