PDFium Delphi Component API Reference

Extração de anexos em lote

Componente: TPdf  ·  Unidade: PDFium
Inventaria os anexos incorporados uma única vez e escreve os respetivos payloads descodificados em fluxos da posse do chamador sob controlos explícitos de recursos

ReadAttachmentMetadata

function ReadAttachmentMetadata(MaxAttachments: Integer = 10000): TPdfAttachmentMetadataArray;

O método enumera os anexos ao nível do documento uma única vez e devolve records da posse do chamador contendo Index, Name, Description, MimeType, Relationship, o Size descodificado e Readable

MaxAttachments é verificado antes de o array de resultados ser preenchido, impedindo que um documento não fidedigno provoque uma alocação de metadados sem limites

A consulta de tamanho não copia bytes de payload para a memória do PDFium Delphi Component, embora o PDFium possa descodificar um fluxo internamente para determinar o comprimento descodificado

ExtractAttachmentsToStreams

function ExtractAttachmentsToStreams(const Destinations: array of TStream; const Options: TPdfAttachmentBatchOptions; out Report: TPdfAttachmentBatchReport; const CancellationToken: IPdfCancellationToken = nil): Boolean;

Destinations tem de conter exatamente um slot por anexo do documento e segue a mesma ordem baseada em zero de Attachment[Index]

Um destino nil marca esse item como paesSkipped, permitindo aos chamadores selecionar anexos sem uma segunda enumeração

Cada payload não vazio é descodificado através do PDFium para um buffer temporário do PDFium Delphi Component e depois escrito a partir desse buffer em porções de ChunkBytes

O buffer é libertado antes do anexo seguinte, por isso o PDFium Delphi Component nunca retém o lote completo, mas a API pública de anexos do PDFium não suporta leituras por intervalos e pode usar internamente a sua própria memória de descodificação do payload completo

Os fluxos continuam na posse do chamador, a escrita começa na posição atual de cada fluxo e o método não os rebobina nem os trunca

O cancelamento ou uma exceção num destino pode deixar bytes já escritos nesse fluxo, por isso os chamadores que exigem saída transacional devem fornecer fluxos temporários e publicá-los apenas depois de um relatório bem-sucedido

Options

CampoPredefiniçãoSignificado
MaxAttachments10000Número máximo de entradas de metadados e do relatório
MaxFileBytes256 MiBTamanho descodificado máximo de um anexo
MaxTotalBytes1 GiBNúmero máximo de bytes escritos em todos os destinos
ChunkBytes1 MiBNúmero máximo de bytes passados a uma escrita no fluxo
StopOnErrorTruePara no primeiro item ilegível, fora do orçamento ou com falha de escrita

Report

Cada record TPdfAttachmentMetadata descreve um anexo nativo e TPdfAttachmentMetadataArray guarda o instantâneo dos metadados

Cada TPdfAttachmentBatchItem combina metadados, um TPdfAttachmentExtractionState, os bytes escritos e eventual texto de erro, enquanto TPdfAttachmentBatchItems guarda 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, além de BytesWritten e PeakBufferBytes

Completed significa que todos os itens chegaram a um estado terminal sem cancelamento, enquanto o resultado da função exige adicionalmente FailedCount = 0

PeakBufferBytes reporta o maior buffer de payload do PDFium Delphi Component e não inclui a memória privada usada pelo PDFium durante a descodificaçã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