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

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

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

Войти
Новости: Здесь можно поблагодарить участников форума Улыбка
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Как понять, что внутри текста есть изображение  (Прочитано 484 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Борис_С
Форумчанин
***
Offline Offline

Сообщений: 135


« Стартовое сообщение: 27 Октябрь 2020, 19:04 »

Всем доброго дня!
Столкнулся с такой проблемой.
Читаю текст из текстового документа в Writer.
Код:
' Чтение текста из документа Writer
Sub GetText()
  Dim oTCurs As Object 'Created text cursor.
  Dim text
 
  On Error GoTo ExErrorHandler
  oTCurs = ThisComponent.Text.createTextCursor()   
  text = ""
  Dim nItems, i1, curTableName
  Do While true
oTCurs.gotoEndOfParagraph(True)
    text = text + oTCurs.String + " "
    If Not oTCurs.gotoNextParagraph(False) Then Exit Do   
  Loop
  Exit Sub
ExErrorHandler:
  MsgBox "Ошибка чтения текста документа." + CHR$(10) + Error(), MB_ICONSTOP   
  On Error GoTo 0
End Sub

Когда в тексте нет изображений, я легко попадаю в нужное место документа, используя видимый курсор и полученный текст.
Если же в тексте есть изображения, мне не попасть в нужное место документа, т.к. эта процедура пропускает все изображения и
при позиционировании на текст, я оказываюсь на несколько символов ближе, чем нужно.
Подскажите, пожалуйста, как понять, что внутри текста есть изображение?
Спасибо.
Записан
economist
Форумчанин
***
Offline Offline

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


« Ответ #1: 28 Октябрь 2020, 08:39 »

оказываюсь на несколько символов ближе, чем нужно.

oTCurs.gotoEndOfWord(False)
oTCurs.gotoEndOfSentence(False) ' или
Записан

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

Сообщений: 135


« Ответ #2: 30 Октябрь 2020, 14:55 »

Я поменял oTCurs.gotoEndOfParagraph(True) на oTCurs.gotoEndOfWord(True)
Результат получился тот же.
Затем попробовал поменять на oTCurs.gotoEndOfSentence(True)
Тот же результат.
Изображения пропускаются.
На всякий случай посылаю файл, на котором отлаживаюсь.

* inline_test1.odt (12.88 Кб - загружено 5 раз.)
Записан
economist
Форумчанин
***
Offline Offline

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


« Ответ #3: 2 Ноябрь 2020, 08:17 »

Судя по файлу, Writer вы используете не совсем правильно. То что является текстом - им и должно быть. В PhotoShop - наоборот (картинка - д.б. картинкой).

Если допустить что OpenOffice|LibreOffice Writer глючит в абзаце с картинками - ищите края абзаца из других абзацев. Может влияет Привязка - Как символ (пробуйте К символу).   
Записан

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

Сообщений: 135


« Ответ #4: 6 Ноябрь 2020, 13:49 »

Понял, как это сделать.
Нужно читать текст посимвольно. Если полученный символ пуст, значит я попал в картинку.
Вот как примерно выглядит этот макрос.
Код:
' Чтение текста из документа Writer
Sub GetText()
  Dim oTCurs As Object 'Created text cursor.
  Dim text
 
  On Error GoTo ExErrorHandler
  oTCurs = ThisComponent.Text.createTextCursor()   
  text = ""   
  Do While true
    oTCurs.GoRight(0, false)
    If Not oTCurs.GoRight(1, true) Then Exit Do
    If oTCurs.String <> "" Then
       text = text + oTCurs.String
        Else
       text = text + " "  'изображение
       EndIf
  Loop
  Exit Sub
ExErrorHandler:
  MsgBox "Ошибка чтения текста документа." + CHR$(10) + Error(), MB_ICONSTOP   
  On Error GoTo 0
End Sub
Записан
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

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