function ReadAttachmentMetadata(MaxAttachments: Integer = 10000): TPdfAttachmentMetadataArray;
Il metodo enumera una sola volta gli allegati a livello di documento e restituisce record di proprietà del chiamante contenenti Index, Name, Description, MimeType, Relationship, la Size decodificata e Readable
MaxAttachments viene verificato prima che l'array risultato venga popolato, impedendo a un documento non fidato di causare un'allocazione di metadati senza limiti
L'interrogazione delle dimensioni non copia i byte del payload nella memoria di PDFium Delphi Component, anche se PDFium può decodificare internamente uno stream per determinarne la lunghezza decodificata
function ExtractAttachmentsToStreams(const Destinations: array of TStream; const Options: TPdfAttachmentBatchOptions; out Report: TPdfAttachmentBatchReport; const CancellationToken: IPdfCancellationToken = nil): Boolean;
Destinations deve contenere esattamente uno slot per ogni allegato del documento e segue lo stesso ordine a base zero di Attachment[Index]
Una destinazione nil contrassegna quell'elemento come paesSkipped, permettendo ai chiamanti di selezionare gli allegati senza una seconda enumerazione
Ogni payload non vuoto viene decodificato attraverso PDFium in un buffer temporaneo di PDFium Delphi Component e poi scritto da quel buffer a blocchi di ChunkBytes
Il buffer viene rilasciato prima dell'allegato successivo, quindi PDFium Delphi Component non trattiene mai l'intero batch, ma l'API pubblica degli allegati di PDFium non supporta letture per intervallo e può usare internamente la propria memoria di decodifica dell'intero payload
Gli stream restano di proprietà del chiamante, la scrittura inizia dalla posizione corrente di ogni stream e il metodo non li riavvolge né li tronca
Un annullamento o un'eccezione di destinazione può lasciare byte già scritti su quello stream, quindi i chiamanti che richiedono un output transazionale dovrebbero fornire stream temporanei e pubblicarli solo dopo un report positivo
| Field | Default | Meaning |
|---|---|---|
MaxAttachments | 10000 | Numero massimo di voci di metadati e report |
MaxFileBytes | 256 MiB | Dimensione decodificata massima di un allegato |
MaxTotalBytes | 1 GiB | Numero massimo di byte scritti su tutte le destinazioni |
ChunkBytes | 1 MiB | Numero massimo di byte passati a una singola scrittura sullo stream |
StopOnError | True | Fermarsi dopo il primo elemento illeggibile, oltre budget o con scrittura fallita |
Ogni record TPdfAttachmentMetadata descrive un allegato nativo e TPdfAttachmentMetadataArray memorizza l'istantanea dei metadati
Ogni TPdfAttachmentBatchItem combina metadati, uno TPdfAttachmentExtractionState, i byte scritti e un eventuale testo di errore, mentre TPdfAttachmentBatchItems memorizza tutti i risultati per elemento
I valori di TPdfAttachmentExtractionState sono paesNotProcessed, paesSkipped, paesExtracted, paesUnreadable, paesFileLimit, paesAggregateLimit, paesCancelled e paesWriteFailed
Il TPdfAttachmentBatchReport conta AttachmentCount, ExtractedCount, SkippedCount e FailedCount insieme a BytesWritten e PeakBufferBytes
Completed significa che ogni elemento ha raggiunto uno stato terminale senza annullamenti, mentre il risultato della funzione richiede inoltre FailedCount = 0
PeakBufferBytes riporta il più grande buffer di payload di PDFium Delphi Component e non include la memoria privata usata da PDFium durante la decodifica
var Options: TPdfAttachmentBatchOptions;
var Report: TPdfAttachmentBatchReport;
Options := TPdfAttachmentBatchOptions.Default;
Options.MaxFileBytes := 64 * 1024 * 1024;
Options.MaxTotalBytes := 256 * 1024 * 1024;
if not Pdf1.ExtractAttachmentsToStreams(Destinations, Options, Report) then
HandleAttachmentBatchFailure(Report);