function ReadAttachmentMetadata(MaxAttachments: Integer = 10000): TPdfAttachmentMetadataArray;
El método enumera una sola vez los adjuntos a nivel de documento y devuelve registros propiedad del llamador que contienen Index, Name, Description, MimeType, Relationship, el Size decodificado y Readable
MaxAttachments se comprueba antes de poblar la matriz de resultados, lo que impide que un documento no confiable cause una asignación de metadatos sin límite
La consulta de tamaño no copia los bytes de la carga útil a la memoria de PDFium Delphi Component, aunque PDFium puede decodificar un flujo internamente para determinar su longitud decodificada
function ExtractAttachmentsToStreams(const Destinations: array of TStream; const Options: TPdfAttachmentBatchOptions; out Report: TPdfAttachmentBatchReport; const CancellationToken: IPdfCancellationToken = nil): Boolean;
Destinations debe contener exactamente una ranura por adjunto del documento y sigue el mismo orden de base cero que Attachment[Index]
Un destino nil marca ese elemento como paesSkipped, lo que permite a los llamadores seleccionar adjuntos sin una segunda enumeración
Cada carga útil no vacía se decodifica a través de PDFium hacia un búfer temporal de PDFium Delphi Component y luego se escribe desde ese búfer en piezas de ChunkBytes
El búfer se libera antes del siguiente adjunto, de modo que PDFium Delphi Component nunca retiene el lote completo, pero la API pública de adjuntos de PDFium no admite lecturas por rango y puede usar su propia memoria de decodificación de carga completa internamente
Los flujos siguen siendo propiedad del llamador, la escritura comienza en cada posición actual del flujo y el método no los rebobina ni los trunca
Una cancelación o una excepción de un destino puede dejar bytes ya escritos en ese flujo, de modo que los llamadores que requieren una salida transaccional deben suministrar flujos temporales y publicarlos solo después de un informe exitoso
| Field | Default | Meaning |
|---|---|---|
MaxAttachments | 10000 | Número máximo de entradas de metadatos e informe |
MaxFileBytes | 256 MiB | Tamaño decodificado máximo de un adjunto |
MaxTotalBytes | 1 GiB | Número máximo de bytes escritos en todos los destinos |
ChunkBytes | 1 MiB | Número máximo de bytes pasados a una escritura de flujo |
StopOnError | True | Detenerse tras el primer elemento ilegible, fuera de presupuesto o con escritura fallida |
Cada registro TPdfAttachmentMetadata describe un adjunto nativo y TPdfAttachmentMetadataArray almacena la instantánea de metadatos
Cada TPdfAttachmentBatchItem combina metadatos, un TPdfAttachmentExtractionState, los bytes escritos y cualquier texto de error, mientras que TPdfAttachmentBatchItems almacena todos los resultados por elemento
Los valores de TPdfAttachmentExtractionState son paesNotProcessed, paesSkipped, paesExtracted, paesUnreadable, paesFileLimit, paesAggregateLimit, paesCancelled y paesWriteFailed
El TPdfAttachmentBatchReport cuenta AttachmentCount, ExtractedCount, SkippedCount y FailedCount junto con BytesWritten y PeakBufferBytes
Completed significa que cada elemento alcanzó un estado terminal sin cancelación, mientras que el resultado de la función exige además FailedCount = 0
PeakBufferBytes informa del mayor búfer de carga útil de PDFium Delphi Component y no incluye la memoria privada usada por PDFium durante la decodificación
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);