PDFium Delphi Component Référence API

Extraction par lot des pièces jointes

Composant: TPdf  ·  Unit: PDFium
Inventorie une seule fois les pièces jointes intégrées et écrit leurs charges utiles décodées dans des flux possédés par l’appelant sous des contrôles de ressources explicites

ReadAttachmentMetadata

function ReadAttachmentMetadata(MaxAttachments: Integer = 10000): TPdfAttachmentMetadataArray;

La méthode énumère une seule fois les pièces jointes au niveau du document et renvoie des records possédés par l’appelant contenant Index, Name, Description, MimeType, Relationship, la Size décodée et Readable

MaxAttachments est vérifié avant que le tableau de résultats ne soit rempli, empêchant un document non fiable de provoquer une allocation de métadonnées non bornée

La requête de taille ne copie pas les octets de charge utile dans la mémoire de PDFium Delphi Component, bien que PDFium puisse décoder un flux en interne pour déterminer sa longueur décodée

ExtractAttachmentsToStreams

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

Destinations doit contenir exactement un emplacement par pièce jointe du document et suit le même ordre base zéro que Attachment[Index]

Une destination nil marque cet élément comme paesSkipped, permettant aux appelants de sélectionner des pièces jointes sans une seconde énumération

Chaque charge utile non vide est décodée via PDFium dans un tampon temporaire unique de PDFium Delphi Component puis écrite depuis ce tampon par morceaux de ChunkBytes

Le tampon est libéré avant la pièce jointe suivante, si bien que PDFium Delphi Component ne conserve jamais le lot entier, mais l’API publique des pièces jointes de PDFium ne prend pas en charge les lectures par plage et peut utiliser en interne sa propre mémoire de décodage de charge utile complète

Les flux restent possédés par l’appelant, l’écriture commence à la position actuelle de chaque flux et la méthode ne les rembobine ni ne les tronque

Une annulation ou une exception de destination peut laisser des octets déjà écrits dans ce flux ; les appelants qui exigent une sortie transactionnelle doivent donc fournir des flux temporaires et ne les publier qu’après un rapport réussi

Options

FieldDefaultMeaning
MaxAttachments10000Nombre maximal d’entrées de métadonnées et de rapport
MaxFileBytes256 MiBTaille décodée maximale d’une pièce jointe
MaxTotalBytes1 GiBNombre maximal d’octets écrits sur l’ensemble des destinations
ChunkBytes1 MiBNombre maximal d’octets transmis à une écriture de flux
StopOnErrorTrueS’arrêter après le premier élément illisible, hors budget ou en échec d’écriture

Report

Chaque record TPdfAttachmentMetadata décrit une pièce jointe native et TPdfAttachmentMetadataArray stocke l’instantané de métadonnées

Chaque TPdfAttachmentBatchItem combine des métadonnées, un TPdfAttachmentExtractionState, les octets écrits et un éventuel texte d’erreur, tandis que TPdfAttachmentBatchItems stocke tous les résultats par élément

Les valeurs de TPdfAttachmentExtractionState sont paesNotProcessed, paesSkipped, paesExtracted, paesUnreadable, paesFileLimit, paesAggregateLimit, paesCancelled et paesWriteFailed

Le TPdfAttachmentBatchReport compte AttachmentCount, ExtractedCount, SkippedCount et FailedCount ainsi que BytesWritten et PeakBufferBytes

Completed signifie que chaque élément a atteint un état terminal sans annulation, tandis que le résultat de la fonction exige en outre FailedCount = 0

PeakBufferBytes signale le plus grand tampon de charge utile de PDFium Delphi Component et n’inclut pas la mémoire privée utilisée par PDFium pendant le décodage

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