Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

30 Октябрь 2020, 22:48 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Часто задаваемые вопросы по LibreOffice и Apache OpenOffice.org
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Как отловить разрыв страницы  (Прочитано 448 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Борис_С
Форумчанин
***
Offline Offline

Сообщений: 113


« Стартовое сообщение: 29 Сентябрь 2020, 14:20 »

Всем доброго дня!
Я анализирую текст в Writer. Двигаюсь по нему с помощью текстового курсора.
Можно как-то понять, что в каком-то месте текста есть разрыв страницы (переход на новую страницу)?
Спасибо.
Записан
economist
Форумчанин
***
Offline Offline

Сообщений: 1 298


« Ответ #1: 29 Сентябрь 2020, 14:36 »

Всё, как обычно, у Питоньяка:

oVCurs = ThisComponent.getCurrentController().getViewCursor()
oVCurs.jumpToLastPage() '(bExtend)  
oVCurs.jumpToEndOfPage()
oText = ThisComponent.getText()
oText.insertControlCharacter(oVCurs, com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK, False) ' вставили Пустой абз
oVCurs.PageDescName = oVCurs.PageStyleName ' вставили Разрыв страницы + Оставляем предыдущий стиль страницы

Как видите - сложно даже со вставкой :-) Но разобраться можно.
Я предпочитаю не парсить док, а заранее знать где будет Разрыв страницы (ручной, тот который Ctrl+Enter или который предопределен Стилем). Для этого нужно переосмыслить док, создать стили, присвоить их и бить точно в цель.
« Последнее редактирование: 29 Сентябрь 2020, 14:44 от economist » Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
Борис_С
Форумчанин
***
Offline Offline

Сообщений: 113


« Ответ #2: 29 Сентябрь 2020, 16:13 »

У меня есть готовый документ. Мне не нужно корректировать его.
Мне нужно понять, где происходит переход на новую страницу.
Записан
sokol92
Форумчанин
***
Offline Offline

Пол: Мужской
Сообщений: 196


WWW
« Ответ #3: 29 Сентябрь 2020, 20:28 »

У Питоньяка эта техника изложена в подразделе "Keep the view cursor and text cursor in sync"
Процедура TextCursorPage показывает, находится ли текстовый курсор в начале или конце страницы.

Код:
Sub TextCursorPage(Byval oDoc, Byval oTextCursor)
  Dim oViewCursor, oText
  oText=oDoc.Text
  oViewCursor = oDoc.CurrentController.getViewCursor()
  oViewCursor.gotoRange(oTextCursor, False)
 
  oViewCursor.jumpToStartOfPage()
  Msgbox "Курсор находится " & IIf(oText.compareRegionStarts(oTextCursor, oViewCursor)=0, "", " не ") & "на начале страницы"
 
  oViewCursor.jumpToEndOfPage()
  Msgbox "Курсор находится " & IIf(oText.compareRegionStarts(oTextCursor, oViewCursor)=0, "", " не ") & "в конце страницы"

End Sub

Sub TestCursor()
  Dim oTextCursor
  oTextCursor =ThisComponent.Text.createTextCursorByRange(ThisComponent.CurrentController.getViewCursor())
  TextCursorPage ThisComponent, oTextCursor
End Sub

Записан

Владимир.
Борис_С
Форумчанин
***
Offline Offline

Сообщений: 113


« Ответ #4: 29 Сентябрь 2020, 20:44 »

Спасибо. Похоже без отображаемого курсора не обойтись.
Я то хотел все это сделать с помощью текстового курсора, чтобы текст не скакал по экрану,
но похоже с этим API это невозможно.
Записан
sokol92
Форумчанин
***
Offline Offline

Пол: Мужской
Сообщений: 196


WWW
« Ответ #5: 30 Сентябрь 2020, 12:39 »

C мельканием экрана можно так бороться:

Код:
Sub TestCursor2()
  Dim oViewCursor, i As Long
  oViewCursor =ThisComponent.CurrentController.getViewCursor()
 
  ThisComponent.lockControllers()

  For i=1 To 40
    oViewCursor.jumpToPage(i)
    Wait 100
  Next i 
 
  ThisComponent.unlockControllers()
 
End Sub
Записан

Владимир.
Борис_С
Форумчанин
***
Offline Offline

Сообщений: 113


« Ответ #6: 30 Сентябрь 2020, 15:57 »

Владимир, вы не сокол, вы - ангел. Это именно то, что мне нужно. Спасибо.
Записан
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!