PDFium Delphi Component Docs

TryGetAnnotationFileAttachment Metod

Component: TPdf  ·  Unit: PDFium
Läser den inbäddade fil som en filbilageannotering på den aktuella sidan bär på och returnerar dess namn, beskrivning, MIME-subtyp och avkodade nyttobytes

Syntax

function TryGetAnnotationFileAttachment(AnnotIndex: Integer; out Attachment: TPdfAnnotationAttachment; MaxBytes: Cardinal = 67108864): Boolean;

AnnotIndexInteger. Nollbaserat index för annoteringen på den aktuella sidan, i intervallet 0 .. AnnotationCount - 1. Ett index utanför intervallet utlöser ett EPdfError
AttachmentTPdfAnnotationAttachment. Vid lyckat anrop: Name, Description, MimeType och den avkodade nyttolasten i Data (TBytes). Nollställs till sitt standardvärde innan anropet körs
MaxBytesCardinal. Övre gräns för nyttolastens storlek. Standardvärdet 67108864 tillåter upp till 64 MB; en större nyttolast utlöser ett EPdfError
ResultBoolean. 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

Description

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

Remarks

Example

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;

See Also

AddAnnotationFileAttachment, Annotation, AnnotationCount, Attachment