PDFium Delphi Component API Reference

Extração de anexos em lote

Componente: TPdf  ·  Unidade: PDFium
Inventaria anexos incorporados uma única vez e grava seus payloads decodificados em streams de propriedade do chamador sob controles explícitos de recursos

ReadAttachmentMetadata

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

ExtractAttachmentsToStreams

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

Options

FieldDefaultMeaning
MaxAttachments10000Máximo de entradas de metadados e de relatório
MaxFileBytes256 MiBTamanho decodificado máximo de um anexo
MaxTotalBytes1 GiBMáximo de bytes gravados em todos os destinos
ChunkBytes1 MiBMáximo de bytes passados a uma gravação no stream
StopOnErrorTrueParar após o primeiro item ilegível, acima do orçamento ou com falha de gravação

Report

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

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