function TryGetAnnotationFileAttachment(AnnotIndex: Integer; out Attachment: TPdfAnnotationAttachment; MaxBytes: Cardinal = 67108864): Boolean;
| AnnotIndex | Integer. Nollbaserat index för annoteringen på den aktuella sidan, i intervallet 0 .. AnnotationCount - 1. Ett index utanför intervallet utlöser ett EPdfError |
| Attachment | TPdfAnnotationAttachment. Vid lyckat anrop: Name, Description, MimeType och den avkodade nyttolasten i Data (TBytes). Nollställs till sitt standardvärde innan anropet körs |
| MaxBytes | Cardinal. Övre gräns för nyttolastens storlek. Standardvärdet 67108864 tillåter upp till 64 MB; en större nyttolast utlöser ett EPdfError |
| Result | Boolean. True när annoteringen bär på en filbilaga och nyttolasten lästes helt; False när den saknar en eller nyttolasten inte kunde avkodas |
En filbilageannotering fäster en inbäddad fil vid en punkt på en sida. Det här anropet öppnar annoteringen via det nativa gränssnittet (FPDFAnnot_GetFileAttachment) och, när annoteringen bär på en bilaga, läser dess beskrivande fält och hela den avkodade nyttolasten till en TPdfAnnotationAttachment-post
Resultatet är ett Try-mönster: en annotering utan bilaga returnerar False i stället för att utlösa undantag, och en nyttolast som inte går att avkoda returnerar också False. Bara en för stor nyttolast blir ett undantag, så gränsen MaxBytes kan fungera som ett hårt skydd mot minnesutmattning från fientliga dokument
Annoteringsbilagor är skilda från det träd av EmbeddedFiles på dokumentnivå som Attachment exponerar: en bilaga kan sitta på en sidannotering utan att synas i det trädet, och tvärtom. Använd AddAnnotationFileAttachment för att bifoga data till en befintlig annotering i ett anrop
MaxBytes på ett värde som passar applikationen innan du anropar på dokument du inte litar på
var
I: Integer;
Attachment: TPdfAnnotationAttachment;
begin
for I := 0 to Pdf1.AnnotationCount - 1 do
if (Pdf1.Annotation[I].Subtype = anFileAttachment) and
Pdf1.TryGetAnnotationFileAttachment(I, Attachment) then
begin
TFile.WriteAllBytes('extracted\' + Attachment.Name, Attachment.Data);
Memo1.Lines.Add(Format('%s (%s, %d bytes)',
[Attachment.Name, Attachment.MimeType, Length(Attachment.Data)]));
end;
end;