PDFium Delphi Component Referencia API

Extracción de adjuntos por lotes

Componente: TPdf  ·  Unidad: PDFium
Inventariza una sola vez los adjuntos incrustados y escribe sus cargas útiles decodificadas en flujos propiedad del llamador bajo controles explícitos de recursos

ReadAttachmentMetadata

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

ExtractAttachmentsToStreams

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

Options

FieldDefaultMeaning
MaxAttachments10000Número máximo de entradas de metadatos e informe
MaxFileBytes256 MiBTamaño decodificado máximo de un adjunto
MaxTotalBytes1 GiBNúmero máximo de bytes escritos en todos los destinos
ChunkBytes1 MiBNúmero máximo de bytes pasados a una escritura de flujo
StopOnErrorTrueDetenerse tras el primer elemento ilegible, fuera de presupuesto o con escritura fallida

Report

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

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