PDFium Delphi Component API Reference

Estrazione in batch degli allegati

Componente: TPdf  ·  Unità: PDFium
Inventaria gli allegati incorporati una sola volta e scrive i loro payload decodificati su stream di proprietà del chiamante sotto controlli espliciti delle risorse

ReadAttachmentMetadata

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

ExtractAttachmentsToStreams

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

Options

FieldDefaultMeaning
MaxAttachments10000Numero massimo di voci di metadati e report
MaxFileBytes256 MiBDimensione decodificata massima di un allegato
MaxTotalBytes1 GiBNumero massimo di byte scritti su tutte le destinazioni
ChunkBytes1 MiBNumero massimo di byte passati a una singola scrittura sullo stream
StopOnErrorTrueFermarsi dopo il primo elemento illeggibile, oltre budget o con scrittura fallita

Report

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

Example

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);

See Also

Attachment, AttachmentCount, AttachmentDescription, AttachmentName, AttachmentType