Чего то попробовал сделать (самому интересно стало, вдруг пригодится когда)
Файл большой, код сюда не вмещается
Даю
ссылку на Гугл диск
Основная идея - Делаем невидимое окно, размерами такое же, как область просмотра. В него загружаем текст. И в нем по размерам считаем, какие параграфы помещаются на страницу.
При ресайзе количество страниц может измениться. Я сделал, что после ресайза мы пересчитываем количество страниц, и переходим на ту страницу, что бы был виден параграф, который был первым на видимой странице до ресайза.
Что смог прокомментарил, что бы понятнее было