PDFium Delphi Component API リファレンス

添付ファイルの一括抽出

コンポーネント: TPdf  ·  ユニット: PDFium
埋め込み添付を 1 度だけ棚卸しし、明示的なリソース制御のもとでデコード済みペイロードを呼び出し側所有のストリームへ書き込みます

ReadAttachmentMetadata

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

このメソッドはドキュメントレベルの添付を 1 回列挙し、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 はドキュメントの添付 1 件につき正確に 1 つのスロットを含まなければならず、Attachment[Index] と同じ 0 始まりの順序に従います

nil の宛先はその項目を paesSkipped としてマークするため、呼び出し側は 2 回目の列挙なしで添付を選択できます

空でない各ペイロードは PDFium を通じて 1 つの一時 PDFium Delphi Component バッファへデコードされ、そのバッファから ChunkBytes ずつ書き込まれます

バッファは次の添付へ進む前に解放されるため、PDFium Delphi Component がバッチ全体を保持し続けることはありません。ただし、公開されている PDFium 添付 API は範囲読み取りをサポートせず、内部でペイロード全体のデコードメモリを使用する場合があります

ストリームの所有権は呼び出し側にあり、書き込みは各ストリームの現在位置から始まり、メソッドは巻き戻しも切り詰めも行いません

キャンセルや宛先の例外により、そのストリームに既に書き込まれたバイトが残ることがあります。トランザクション的な出力が必要な呼び出し側は、一時ストリームを渡し、成功したレポートの後にのみ公開してください

オプション

フィールドデフォルト意味
MaxAttachments10000メタデータとレポートエントリの最大数
MaxFileBytes256 MiB1 つの添付の最大デコードサイズ
MaxTotalBytes1 GiBすべての宛先にわたって書き込む最大バイト数
ChunkBytes1 MiB1 回のストリーム書き込みに渡す最大バイト数
StopOnErrorTrue最初の読み取り不可、予算超過、書き込み失敗の項目の後に停止します

レポート

各 TPdfAttachmentMetadata レコードは 1 つのネイティブ添付を記述し、TPdfAttachmentMetadataArray はメタデータのスナップショットを保持します

各 TPdfAttachmentBatchItem はメタデータ、TPdfAttachmentExtractionState、書き込まれたバイト数、任意のエラーテキストを組み合わせ、TPdfAttachmentBatchItems はすべての項目ごとの結果を保持します

TPdfAttachmentExtractionState の値は、paesNotProcessed、paesSkipped、paesExtracted、paesUnreadable、paesFileLimit、paesAggregateLimit、paesCancelled、paesWriteFailed です

TPdfAttachmentBatchReport は AttachmentCount、ExtractedCount、SkippedCount、FailedCount を BytesWritten および PeakBufferBytes とともに数えます

Completed は、キャンセルなしですべての項目が終端状態に達したことを意味します。関数の戻り値はさらに FailedCount = 0 を要求します

PeakBufferBytes は PDFium Delphi Component のペイロードバッファの最大サイズを報告し、デコード中に PDFium が使用するプライベートメモリは含みません

例

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);

関連項目

Attachment, AttachmentCount, AttachmentDescription, AttachmentName, AttachmentType