Как понять, что внутри текста есть изображение

Автор Борис_С, 27 октября 2020, 19:04

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

Борис_С

Всем доброго дня!
Столкнулся с такой проблемой.
Читаю текст из текстового документа в 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

Цитата: Борис_С от 27 октября 2020, 19:04оказываюсь на несколько символов ближе, чем нужно.

oTCurs.gotoEndOfWord(False)
oTCurs.gotoEndOfSentence(False) ' или
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

Борис_С

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

economist

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

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

Борис_С

Понял, как это сделать.
Нужно читать текст посимвольно. Если полученный символ пуст, значит я попал в картинку.
Вот как примерно выглядит этот макрос.

' Чтение текста из документа 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