PDFium Delphi Component API 참조

첨부 파일 일괄 추출

컴포넌트: TPdf  ·  유닛: PDFium
임베드된 첨부 파일을 한 번 조사하고, 명시적 리소스 제어 아래 디코딩된 페이로드를 호출자 소유 스트림에 기록합니다

ReadAttachmentMetadata

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

이 메서드는 문서 수준 첨부 파일을 한 번 열거하고 Index, Name, Description, MimeType, Relationship, 디코딩된 Size, Readable을 담은 호출자 소유 레코드를 반환합니다

MaxAttachments는 결과 배열을 채우기 전에 검사되므로, 신뢰할 수 없는 문서가 무제한 메타데이터 할당을 유발하지 못합니다

크기 조회는 페이로드 바이트를 PDFium Delphi Component 메모리로 복사하지 않습니다. 다만 PDFium이 디코딩된 길이를 구하기 위해 내부적으로 스트림을 디코딩할 수는 있습니다

ExtractAttachmentsToStreams

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

Destinations는 문서 첨부 파일마다 정확히 하나의 슬롯을 담아야 하며 Attachment[Index]와 같은 0 기반 순서를 따릅니다

nil 대상은 해당 항목을 paesSkipped로 표시하므로, 호출자가 두 번째 열거 없이 첨부 파일을 선택할 수 있습니다

비어 있지 않은 각 페이로드는 PDFium을 통해 임시 PDFium Delphi Component 버퍼 하나로 디코딩된 뒤 그 버퍼에서 ChunkBytes 조각으로 기록됩니다

버퍼는 다음 첨부 파일 전에 해제되므로 PDFium Delphi Component가 배치 전체를 계속 들고 있지는 않지만, 공개 PDFium 첨부 파일 API는 range 읽기를 지원하지 않으므로 내부적으로 자체 전체 페이로드 디코딩 메모리를 사용할 수 있습니다

스트림 소유권은 호출자에게 남고, 쓰기는 각 스트림의 현재 위치에서 시작되며, 이 메서드는 되감거나 잘라내지 않습니다

취소나 대상 예외는 이미 그 스트림에 기록된 바이트를 남길 수 있으므로, 트랜잭션적 출력이 필요한 호출자는 임시 스트림을 제공하고 성공한 보고를 받은 뒤에만 공개해야 합니다

Options

FieldDefaultMeaning
MaxAttachments10000최대 메타데이터 및 보고 항목 수입니다
MaxFileBytes256 MiB첨부 파일 하나의 최대 디코딩 크기입니다
MaxTotalBytes1 GiB모든 대상에 기록되는 최대 바이트 수입니다
ChunkBytes1 MiB한 번의 스트림 쓰기에 전달되는 최대 바이트 수입니다
StopOnErrorTrue읽을 수 없거나 예산을 초과하거나 쓰기에 실패한 첫 항목 후 중지합니다

Report

각 TPdfAttachmentMetadata 레코드는 네이티브 첨부 파일 하나를 기술하고 TPdfAttachmentMetadataArray는 메타데이터 스냅샷을 저장합니다

각 TPdfAttachmentBatchItem은 메타데이터, TPdfAttachmentExtractionState, 기록된 바이트, 오류 텍스트를 결합하고, TPdfAttachmentBatchItems는 항목별 결과를 모두 저장합니다

TPdfAttachmentExtractionState 값은 paesNotProcessed, paesSkipped, paesExtracted, paesUnreadable, paesFileLimit, paesAggregateLimit, paesCancelled, paesWriteFailed입니다

TPdfAttachmentBatchReport는 BytesWritten 및 PeakBufferBytes와 함께 AttachmentCount, ExtractedCount, SkippedCount, FailedCount를 셉니다

Completed는 모든 항목이 취소 없이 최종 상태에 도달했음을 의미하고, 함수 결과는 추가로 FailedCount = 0을 요구합니다

PeakBufferBytes는 가장 컸던 PDFium Delphi Component 페이로드 버퍼를 보고하며, PDFium이 디코딩 중 사용한 private 메모리는 포함하지 않습니다

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