THPDFWindowsFormDataSource

HPDFWindowsFormData даёт владеемый источник произвольного доступа Windows с приватным временем жизни временного файла

THPDFWindowsFormDataSource = class(THPDFRandomAccessSource)
  constructor Create;
  destructor Destroy; override;
  procedure Seal;
  function GetSize: Int64; override;
  function ReadAt(Offset: Int64; var Buffer; Count: Longint): Longint; override;
  property Stream: TFileStream;
end;

Create монопольно резервирует уникальный временный файл и открывает его записываемый Stream; запишите полный источник и один раз вызовите Seal, прежде чем передавать его загруженному документу

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

GetSize сообщает полную текущую длину потока; ReadAt отвергает отрицательные смещения и счётчики, ограничивает чтение доступными байтами, возвращает ноль на EOF и дальше, и восстанавливает позицию потока при успехе и при сбое

Документ, загруженный с OwnSource=False, заимствует источник; держите его живым до разрушения документа; Destroy закрывает дескриптор и удаляет собственный приватный файл

У источника нет собственной отмены или лимита байтов; транзакционный и колбэковый адаптеры соблюдают их при копировании и чтении; готовящие источник напрямую вызывающие обязаны применять собственные границы и политику отмены

Класс транзакции, Обмен данными Windows-форм