function ReadAttachmentMetadata(MaxAttachments: Integer = 10000): TPdfAttachmentMetadataArray;
El método enumera los adjuntos de nivel de documento una sola vez y devuelve registros propiedad de quien llama que contienen Index, Name, Description, MimeType, Relationship, el Size decodificado y Readable
MaxAttachments se comprueba antes de llenar el arreglo de resultados, lo que impide que un documento que no es de confianza cause una asignación de metadatos sin límites
La consulta de tamaño no copia 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 posición por cada 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 quien llama seleccionar adjuntos sin una segunda enumeración
Cada carga útil no vacía se decodifica a través de PDFium en 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 todo el lote, 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 de quien llama, la escritura comienza en la posición actual de cada flujo y el método no los rebobina ni los trunca
La cancelación o una excepción de un destino puede dejar bytes ya escritos en ese flujo, de modo que quienes requieren una salida transaccional deben suministrar flujos temporales y publicarlos solo después de un informe exitoso
| Campo | Predeterminado | Significado |
|---|---|---|
MaxAttachments | 10000 | Cantidad máxima de entradas de metadatos e informes |
MaxFileBytes | 256 MiB | Tamaño decodificado máximo de un adjunto |
MaxTotalBytes | 1 GiB | Cantidad máxima de bytes escritos en todos los destinos |
ChunkBytes | 1 MiB | Cantidad máxima de bytes pasados a una escritura de flujo |
StopOnError | True | Detenerse después del 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 el búfer de carga útil de PDFium Delphi Component más grande 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);