PDFium Delphi Component Referencia API

Extracción de adjuntos por lotes

Componente: TPdf  ·  Unidad: PDFium
Inventaríe los adjuntos incrustados una sola vez y escriba sus cargas útiles decodificadas en flujos propiedad de quien llama bajo controles explícitos de recursos

ReadAttachmentMetadata

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

ExtractAttachmentsToStreams

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

Options

CampoPredeterminadoSignificado
MaxAttachments10000Cantidad máxima de entradas de metadatos e informes
MaxFileBytes256 MiBTamaño decodificado máximo de un adjunto
MaxTotalBytes1 GiBCantidad máxima de bytes escritos en todos los destinos
ChunkBytes1 MiBCantidad máxima de bytes pasados a una escritura de flujo
StopOnErrorTrueDetenerse después del 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 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

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