function ReadAttachmentMetadata(MaxAttachments: Integer = 10000): TPdfAttachmentMetadataArray;
O método enumera os anexos de nível de documento uma única vez e retorna records de propriedade do chamador contendo Index, Name, Description, MimeType, Relationship, Size decodificado e Readable
MaxAttachments é verificado antes que o array de resultados seja preenchido, impedindo que um documento não confiável cause uma alocação de metadados sem limite
A consulta de tamanho não copia bytes de payload para a memória do PDFium Delphi Component, embora o PDFium possa decodificar um stream internamente para determinar seu comprimento decodificado
function ExtractAttachmentsToStreams(const Destinations: array of TStream; const Options: TPdfAttachmentBatchOptions; out Report: TPdfAttachmentBatchReport; const CancellationToken: IPdfCancellationToken = nil): Boolean;
Destinations deve conter exatamente um slot por anexo do documento e segue a mesma ordem baseada em zero de Attachment[Index]
Um destino nil marca o item como paesSkipped, permitindo que os chamadores selecionem anexos sem uma segunda enumeração
Cada payload não vazio é decodificado por meio do PDFium em um buffer temporário do PDFium Delphi Component e depois gravado desse buffer em partes de ChunkBytes
O buffer é liberado antes do próximo anexo, de modo que o PDFium Delphi Component nunca retém o lote inteiro, mas a API pública de anexos do PDFium não suporta leituras por intervalo e pode usar internamente sua própria memória de decodificação do payload completo
Os streams permanecem de propriedade do chamador, a gravação começa na posição atual de cada stream, e o método não os rebobina nem os trunca
Cancelamento ou uma exceção no destino podem deixar bytes já gravados nesse stream, de modo que chamadores que exigem saída transacional devem fornecer streams temporários e publicá-los somente após um relatório bem-sucedido
| Field | Default | Meaning |
|---|---|---|
MaxAttachments | 10000 | Máximo de entradas de metadados e de relatório |
MaxFileBytes | 256 MiB | Tamanho decodificado máximo de um anexo |
MaxTotalBytes | 1 GiB | Máximo de bytes gravados em todos os destinos |
ChunkBytes | 1 MiB | Máximo de bytes passados a uma gravação no stream |
StopOnError | True | Parar após o primeiro item ilegível, acima do orçamento ou com falha de gravação |
Cada record TPdfAttachmentMetadata descreve um anexo nativo e TPdfAttachmentMetadataArray armazena o snapshot de metadados
Cada TPdfAttachmentBatchItem combina metadados, um TPdfAttachmentExtractionState, bytes gravados e eventual texto de erro, enquanto TPdfAttachmentBatchItems armazena todos os resultados por item
Os valores de TPdfAttachmentExtractionState são paesNotProcessed, paesSkipped, paesExtracted, paesUnreadable, paesFileLimit, paesAggregateLimit, paesCancelled e paesWriteFailed
O TPdfAttachmentBatchReport contabiliza AttachmentCount, ExtractedCount, SkippedCount e FailedCount junto com BytesWritten e PeakBufferBytes
Completed significa que cada item alcançou um estado terminal sem cancelamento, enquanto o resultado da função exige adicionalmente FailedCount = 0
PeakBufferBytes relata o maior buffer de payload do PDFium Delphi Component e não inclui a memória privada usada pelo PDFium durante a decodificação
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);