IHPDFCustomStreamFilter
Описывает custom-декодер с подсчётом ссылок, который используется в конвейерах фильтров загруженных stream
Объявление
IHPDFCustomStreamFilter = interface(IInterface)
function GetFilterName: AnsiString;
function GetMode: THPDFCustomStreamFilterMode;
function GetInputSeekContract: THPDFCustomStreamSeekContract;
function GetOutputSeekContract: THPDFCustomStreamSeekContract;
function DecodePush(Input, Output: TStream;
const Request: THPDFCustomStreamFilterRequest;
out Diagnostic: AnsiString): Boolean;
function OpenPullStream(Input: TStream;
const Request: THPDFCustomStreamFilterRequest;
out DecodedStream: TStream;
out Diagnostic: AnsiString): Boolean;
end;
Параметры
Input передаётся в callback по заимствованию, Output — изолированный ограниченный приёмник для push-режима, а Request несёт идентификатор этапа, оставшийся бюджет и отмену
DecodedStream после успешного pull-результата принадлежит HotPDF, а Diagnostic должен объяснять, почему результат false
Возвращаемое значение
Возвращайте True только после получения полного корректного результата этапа
Примечания по использованию
- Вызывается только метод, выбранный значением
Mode - Не освобождайте, не удерживайте и не возвращайте заимствованный stream
Input - Долгие операции должны кооперативно проверять
Request.CancellationToken - Исключения изолируются как
dpsCustomFilterError,dpsBudgetExceededилиdpsCancelled - Callback выполняются синхронно и вне блокировки реестра