HWPF Apache POI - что такое CharacterRun и как заменить элемент другим? - PullRequest
0 голосов
/ 02 июля 2019

Я пытаюсь обернуть все subSuperScripts фигурными скобками.Я обнаружил, что единственное решение - использовать класс CharacterRun и оперировать им.Несмотря на то, что моя строка имеет длину ~ 50 символов - paragraph.numCharacterRuns() возвращает значение 370. Как так?Означает ли это, что я должен перебрать все символьные строки в параграфе и повторить весь процесс с заменой?Ниже мой код и пример строки, 1 рядом с 9 упоминается subSuberScript.

Мой абзац / текстовая строка:

§ 2. Przepisy art. 91 § 1-4 stosuje się odpowiednio.

Здесьмой код:

paragraphsText.forEachIndexed { i, line ->

    val paragraph = range.getParagraph(i)

    val numCharacterRuns = paragraph.numCharacterRuns()

    for (runIndex in numCharacterRuns - 1 downTo 0) {

        val characterRun = paragraph.getCharacterRun(runIndex)
        val subSuperScriptIndex = characterRun.subSuperScriptIndex

        if (subSuperScriptIndex > 0) {

            if (characterRun.text().isNotEmpty()) {

                val characterStartOffset = characterRun.startOffset - paragraph.startOffset
                val characterEndOffset = characterRun.endOffset - paragraph.startOffset

                printLog(logLines, "Wrapping superSubScript with braces")

                val textRangeChange = paragraph.text().replaceRange(characterStartOffset, characterEndOffset, "(" + characterRun.text() + ")")
                paragraph.replaceText(textRangeChange, false)

            }
        }
    }

    // ... further operations ...

}

Я делаю это неправильно?Не стесняйтесь использовать Java, если Kotlin не является вашим языком.Я открыт для любого решения, даже для псевдокода.

...