property Attachment[Index: Integer]: TBytes;
PDF 문서에는 원본 스프레드시트, 워드 문서, 첨부 인보이스, 서명된 XML 페이로드, ZIP 묶음, 심지어 다른 PDF까지 어떤 부속 파일이든 EmbeddedFiles 이름 트리라는 문서 수준 컨테이너 안에 넣어 둘 수 있습니다. 각 항목은 PDF 파일 스펙 딕셔너리로, 그 스트림이 첨부 파일의 실제 바이트를 담습니다. PDFium Delphi Component는 이 트리를 0부터 AttachmentCount - 1까지의 평면적인 0 기반 인덱스로 노출합니다
Attachment[Index]를 읽으면 첨부 파일의 디코딩된 바이트 내용이 TBytes 배열로 돌아옵니다 — 사용자가 클립 아이콘을 눌러 첨부 파일을 저장할 때 다른 PDF 리더가 추출하는 바이트와 정확히 같은 것입니다. 반환된 바이트는 이미 압축이 풀려 있으므로 디스크에 바로 쓰거나 스트림으로 흘려보내거나, 첨부가 PDF라면 다른 TPdf 인스턴스에 다시 먹일 수도 있습니다
쓰기는 기존 첨부 슬롯의 파일 스트림을 그 자리에서 교체합니다. 슬롯이 이미 존재해야 하며 새 항목을 추가하려면 먼저 CreateAttachment를 사용하세요. 쓰기는 메모리에 버퍼링되고 SaveAs로 문서를 저장해야 비로소 반영됩니다
| Index | Integer. EmbeddedFiles 이름 트리에서의 0 기반 위치입니다. 0 <= Index < AttachmentCount를 만족해야 합니다. 인덱스는 AttachmentName과 AttachmentType이 알려 주는 것과 같으므로, 0..AttachmentCount - 1을 순회하면 각 첨부를 정확히 한 번씩 방문합니다 |
TBytes 배열에 읽힙니다 — 타이트한 루프에서 수십 개의 수 메가바이트 페이로드를 읽기 전에 메모리 압박을 가늠하세요Attachment[Index]에 대입해도 EmbeddedFiles 트리 크기는 절대 바뀌지 않으며 스트림 바이트만 교체합니다. 항목을 제거하려면 DeleteAttachment를 사용하세요
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;