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
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
| Field | Default | Meaning |
|---|---|---|
MaxAttachments | 10000 | Nombre maximal d’entrées de métadonnées et de rapport |
MaxFileBytes | 256 MiB | Taille décodée maximale d’une pièce jointe |
MaxTotalBytes | 1 GiB | Nombre maximal d’octets écrits sur l’ensemble des destinations |
ChunkBytes | 1 MiB | Nombre maximal d’octets transmis à une écriture de flux |
StopOnError | True | S’arrêter après le premier élément illisible, hors budget ou en échec d’écriture |
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
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);