PDFium Delphi Component Docs

Attachment プロパティ

コンポーネント: TPdf  ·  ユニット: PDFium
指定した 0 基準インデックスの文書レベルの埋め込みファイルにある生バイトの payload を読み取るか置き換えます。各 slot は、PDF 1.7 仕様の 7.11 節で定義される PDF EmbeddedFiles name tree の 1 つの entry に対応します

Syntax

property Attachment[Index: Integer]: TBytes;

Description

PDF ドキュメントは、EmbeddedFiles name tree と呼ばれるドキュメントレベルのコンテナに、補助ファイルを何でも持ち込めます。元の表計算シート、Word 原稿、請求書、署名付き XML payload、ZIP の塊、PDF そのものも含めてです。各 entry は PDF の file specification 辞書で、その stream が添付ファイルの実バイトを保持します。PDFium Delphi Component はこの tree を 0 から AttachmentCount - 1 までのフラットな 0 基準インデックスとして公開します

Attachment[Index] を読むと、添付ファイルのデコード済みバイト内容が TBytes 配列で返ります。ユーザーがペーパークリップのアイコンをクリックして添付を保存するとき、他の PDF リーダーが取り出すのとまったく同じバイトです。返されるバイトはすでに伸張済みなので、そのままディスクに書き出しても、stream に流し込んでも、添付が PDF なら別の TPdf インスタンスに渡してもかまいません

書き込みは既存の添付 slot のファイル stream をその場で置き換えます。slot は既に存在していなければならず、新しい entry を追加したい場合は先に CreateAttachment を使ってください。書き込みはメモリ上にバッファされ、SaveAs でドキュメントを保存して初めて永続化します

Parameters

IndexInteger。EmbeddedFiles name tree 内の 0 基準位置。0 <= Index < AttachmentCount を満たす必要があります。インデックスは AttachmentName と AttachmentType が報告するものと一致するため、0..AttachmentCount - 1 を順に回せば各添付をちょうど 1 回ずつ訪れます

Remarks

Example

var
  I: Integer;
  Data: TBytes;
  OutPath: string;
begin
  Pdf1.LoadFromFile('with-attachments.pdf');
  for I := 0 to Pdf1.AttachmentCount - 1 do
  begin
    Data := Pdf1.Attachment[I];
    OutPath := 'extracted\' + Pdf1.AttachmentName[I];
    TFile.WriteAllBytes(OutPath, Data);
    Memo1.Lines.Add(Format('%s (%s, %d bytes)',
      [Pdf1.AttachmentName[I], Pdf1.AttachmentType[I], Length(Data)]));
  end;
end;

See Also

AttachmentCount, AttachmentName, AttachmentType, CreateAttachment, DeleteAttachment