type TPdfReadingSession = class(TComponent) ... end;
The session never talks to a speech engine directly; the host handles OnSpeak, cancel, pause, and resume callbacks while the session tracks chunks and words
Load chunks with LoadSpoken, start with Play or PlayFrom, then call Tick as the engine reports busy or idle state
When the speech engine reports a spoken character offset, call FeedSpokenPosition so the attached TPdfView can highlight the current word
ReadingSession1.View := PdfView1;
ReadingSession1.LoadSpoken(Chunks);
ReadingSession1.Play;