PDFium Delphi Component Docs

Attachment Свойство

Компонент: TPdf  ·  Модуль: PDFium
Читает или заменяет необработанную байтовую нагрузку встроенного файла на уровне документа по указанному индексу с нуля. Каждая ячейка соответствует одной записи в дереве имён EmbeddedFiles PDF, определённом в разделе 7.11 спецификации PDF 1.7

Syntax

property Attachment[Index: Integer]: TBytes;

Description

PDF-документы могут нести с собой произвольные вспомогательные файлы (исходные таблицы, оригинальные Word-документы, приложенные счета, подписанные XML-нагрузки, ZIP-архивы и даже другие PDF) внутри контейнера уровня документа — дерева имён EmbeddedFiles. Каждая запись — словарь файловой спецификации PDF, чей поток хранит фактические байты приложенного файла. PDFium Delphi Component показывает это дерево плоским индексом с нуля от 0 до AttachmentCount - 1

Чтение Attachment[Index] возвращает декодированное байтовое содержимое приложенного файла как массив TBytes — ровно те байты, которые любой другой PDF-ридер извлек бы, когда пользователь щёлкает по значку скрепки и сохраняет вложение. Возвращаемые байты уже распакованы: их можно сразу записать на диск, отдать потоку или передать в другой экземпляр TPdf, если вложение само является PDF

Запись подменяет файловый поток существующего слота вложения на месте. Слот должен уже существовать; если нужно добавить новую запись, сначала вызовите CreateAttachment. Записи буферизуются в памяти и становятся постоянными только после сохранения документа через SaveAs

Parameters

IndexInteger. Позиция в дереве имён EmbeddedFiles с нуля. Должно выполняться 0 <= Index < AttachmentCount. Индексы совпадают с теми, что выдают AttachmentName и AttachmentType, поэтому обход 0..AttachmentCount - 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