LO Basic. Вставить текст в конец страницы документа LO Writer

Автор ost, 28 июля 2021, 11:22

0 Пользователи и 1 гость просматривают эту тему.

ost

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

mikekaganski

Если "в конец страницы" - это низ страницы прямо над нижним колонтитулом (или нижним полем) независимо от уровня окончания основного текста, то ИМО можно воспользоваться фреймом, привязанным к последнему абзацу, и спозиционированным относительно страницы (правда, могут возникнуть проблемы при невмещении основного текста выше фрейма).
С уважением,
Михаил Каганский

ost

#2
Похоже, я не точно описал желаемый результат.
Пока сделал так

oDoc = StarDesktop.LoadComponentFromUrl(sTemplPath, "_blank", 0, noArgs())

'... (код, формирующий содержимое документа oDoc )

'Поиск конца страницы методом тыка абзацами
oVCur = oDoc.CurrentController.getViewCursor()
oVCur.jumpToLastPage()
oVCur.jumpToEndOfPage()
lLastPageNum = oVCur.getPage()
lCurPageNum = lLastPageNum
Do While lCurPageNum = lLastPageNum
oDoc.Text.InsertControlCharacter(oVCur, com.sun.star.text.ControlCharacter.APPEND_PARAGRAPH, False)
oVCur.jumpToEndOfPage()
lCurPageNum = oVCur.getPage()
Loop

'пишем в натыканое
lParTotal = MySet._wrGetParCount(oDoc)
oPar = MySet._wrGetParObj(oDoc, lParTotal-3)
oPar.String = aRPerformer(0)(1) & " " & aRPerformer(0)(2) & " " & aRPerformer(0)(3)
oPar = MySet._wrGetParObj(oDoc, lParTotal-2)
oPar.String = aRPerformer(0)(5)

Функции _wrGetParCount и _wrGetParObj Ваши слегка переработанные функции отсюда https://forumooo.ru/index.php/topic,8746.0/msg,59059.html
массив aRPerformer - источник подстрок для формирования результирующей строки.

Есть мысль, на основе анализа количества итераций Do While...Loop и параметров абзаца принимать решение о необходимости переноса текста на следующий лист и подбора межстрочного интервала имеющихся абзацев для обеспечения "красоты" этого переноса.

mikekaganski

Тогда не проще ли воспользоваться колонтитулами? Положите туда поля, заполняйте на первой странице, оно везде продублируется.
С уважением,
Михаил Каганский

ost

#4
В данном случае этот вариант не подойдет. Речь о вставке данных исполнителя, которые должны указываться слева внизу последней страницы. Их вывод на каждом листе не нужен. Или я не понял мысли.

mikekaganski

Да нет, всё правильно Вы поняли. Это я запутался: вначале в ответе #1 я в принципе как раз предлагал по теме (не знаю чем оно не подходит), а вот в ответе #3 как раз не в тему.

Но может, вообще воспользоваться сносками? Переход в конец документа, вставка концевой сноски с символом маркера типа Word Joiner (без ширины), и в тексте сноски - нужные Вам данные (автоматически внизу страницы; автоматически переносятся на следующую страницу). Стиль абзаца и настройки сноски можно отрегулировать по желанию.
С уважением,
Михаил Каганский

ost

#6
Выглядит приятно. Спасибо. Попробую сделать. Но уже завтра.

Цитата: mikekaganski от 28 июля 2021, 16:25(не знаю чем оно не подходит)
И я не знаю. =) Может, оно и подходит. Моя квалификация не позволяет это оценить. Пока оставлю как есть. Возможно, позже вернусь к этому вопросу.