PDFium Delphi Component Docs

ExtractAttachmentsToStreams metode

Komponent: TPdf  ·  Enhed: PDFium
Dekoder alle dokumentniveau-indlejrede vedhæftninger og skriver payload-bytes til streams leveret af kalderen under eksplicitte grænser for størrelse, chunking, cancellation og fejlrapportering

Syntax

function ExtractAttachmentsToStreams(const Destinations: array of TStream; const Options: TPdfAttachmentBatchOptions; out Report: TPdfAttachmentBatchReport; const CancellationToken: IPdfCancellationToken = nil): Boolean;

DestinationsOpen array of TStream. Én stream pr. vedhæftning, i dokumentrækkefølge. En nil-plads springer den vedhæftning over uden at skrive noget. Streamene forbliver ejet af kalderen
OptionsTPdfAttachmentBatchOptions. Batchgrænser og -adfærd: MaxAttachments, MaxFileBytes, MaxTotalBytes, ChunkBytes og StopOnError. Start fra TPdfAttachmentBatchOptions.Default
ReportTPdfAttachmentBatchReport. Ved returnering bærer den ét element pr. vedhæftning (Metadata, State, BytesWritten, ErrorMessage) plus samlede tællere (AttachmentCount, ExtractedCount, SkippedCount, FailedCount, BytesWritten, PeakBufferBytes, Cancelled, Completed)
CancellationTokenIPdfCancellationToken. Valgfrit token, der poll'es før hver vedhæftning og mellem skrive-chunks; nil kører batchen uden cancellation-kontroller
ResultBoolean. True kun, når batchen blev fuldført uden cancellation og med nul fejlede vedhæftninger; oversprungne poster tælles ikke som fejl

Description

Batch-modstykke til at læse Attachment ét indeks ad gangen. Dokumentets vedhæftninger fanges én gang, og hver payload dekodes og skubbes ind i sin destinations-stream, mens hvert udfald registreres pr. vedhæftning i Report.Items

Destinations-arrayet skal indeholde præcis én stream pr. vedhæftning i dokumentet, ellers udløses en EPdfError, før en eneste byte læses. En nil-post i arrayet markerer vedhæftningen som oversprunget (paesSkipped) i stedet for at afbryde batchen

Options valideres på forhånd og udløser EPdfError, når de er ugyldige: MaxAttachments skal være større end nul, MaxFileBytes og MaxTotalBytes må ikke være negative, og ChunkBytes skal være større end nul. TPdfAttachmentBatchOptions.Default leverer 10000 vedhæftninger, en grænse på 256 MB pr. fil, en samlet grænse på 1 GB, 1 MB skrive-chunks og StopOnError = True

Hver vedhæftning ender i en af tilstandene i TPdfAttachmentExtractionState: paesExtracted ved succes, paesSkipped for en nil-destination, paesUnreadable, når payload'en ikke kan åbnes eller dekodes, paesFileLimit eller paesAggregateLimit, når en størrelsesgrænse overskrides, paesWriteFailed, når destinations-streamen rejser fejl, og paesCancelled, når tokenet fyres. Med StopOnError sat standser den første fejl løkken, og de resterende poster forbliver paesNotProcessed

Funktionen returnerer True kun, når Report.Completed er sat (ingen cancellation, intet tilbage at behandle) og FailedCount er nul. Cancellation-stien returnerer False med Report.Cancelled sat i stedet for at rejse fejl

Remarks

Example

var
  Options: TPdfAttachmentBatchOptions;
  Report: TPdfAttachmentBatchReport;
  Streams: array of TStream;
  I: Integer;
begin
  Pdf1.LoadFromFile('with-attachments.pdf');
  SetLength(Streams, Pdf1.AttachmentCount);
  for I := 0 to High(Streams) do
    Streams[I] := TFileStream.Create('out\' + Pdf1.AttachmentName[I], fmCreate);
  try
    Options := TPdfAttachmentBatchOptions.Default;
    Options.StopOnError := False;
    if not Pdf1.ExtractAttachmentsToStreams(Streams, Options, Report) then
      ShowMessage(Format('%d extracted, %d failed, %d skipped',
        [Report.ExtractedCount, Report.FailedCount, Report.SkippedCount]));
  finally
    for I := 0 to High(Streams) do
      Streams[I].Free;
  end;
end;

See Also

ReadAttachmentMetadata, Attachment, AttachmentCount, AttachmentName