Как получить границы гиперссылок встроенных слов с помощью Aspose Words для Androd? - PullRequest
2 голосов
/ 17 июня 2020

Приложение android для чтения абзацев и некоторых свойств в документе MS Word с помощью библиотеки Aspose Words для Android. Он получает текст абзаца, название стиля и отдельное значение. Некоторые слова имеют гиперссылку в строке абзаца. Как получить начальную и конечную границы гиперссылки слов? Например:

Это встроенная гиперссылка пример абзаца, в котором начальная граница - 18, а конечная - 27.

public static ArrayList<String[]> GetBookLinesByTag(String file) {

    ArrayList<String[]> bookLines = new ArrayList<>();

    try {
        Document doc = new Document(file);
        ParagraphCollection paras = doc.getFirstSection().getBody().getParagraphs();
        for(int i = 0; i < paras.getCount(); i++){
            String styleName = paras.get(i).getParagraphFormat().getStyleName().trim();
            String isStyleSeparator = Integer.toString(paras.get(i).getBreakIsStyleSeparator() ? 1 : 0);
            String content = paras.get(i).toString(SaveFormat.TEXT).trim();
            bookLines.add(new String[]{content, styleName, isStyleSeparator});
        }
    } catch (Exception e){}

    return bookLines;
}

Edit: Спасибо Алексей Носков , решено с вами.

public static ArrayList<String[]> GetBookLinesByTag(String file) {

    ArrayList<String[]> bookLines = new ArrayList<>();

    try {
        Document doc = new Document(file);
        ParagraphCollection paras = doc.getFirstSection().getBody().getParagraphs();
        for(int i = 0; i < paras.getCount(); i++){
            String styleName = paras.get(i).getParagraphFormat().getStyleName().trim();
            String isStyleSeparator = Integer.toString(paras.get(i).getBreakIsStyleSeparator() ? 1 : 0);
            String content = paras.get(i).toString(SaveFormat.TEXT).trim();

            for (Field field : paras.get(i).getRange().getFields()) {
                if (field.getType() == FieldType.FIELD_HYPERLINK) {
                    FieldHyperlink hyperlink = (FieldHyperlink) field;
                    String urlId = hyperlink.getSubAddress();
                    String urlText = hyperlink.getResult();
                    // Reformat linked text: urlText:urlId 
                    content = urlText + ":" + urlId;
                }
            }

            bookLines.add(new String[]{content, styleName, isStyleSeparator});
        }

    } catch (Exception e){}

    return bookLines;
}

1 Ответ

1 голос
/ 17 июня 2020

Гиперссылки в документах MS Word представлены в виде полей. Если вы нажмете Alt + F9 в MS Word, вы увидите что-то вроде этого

{ HYPERLINK "https://aspose.com" }

Перейдите по ссылке, чтобы узнать больше о полях в модели документа Aspose.Words и в MS Word. https://docs.aspose.com/display/wordsjava/Introduction+to+Fields

В вашем случае вам нужно найти позицию FieldStart - это будет начальная позиция, затем измерить длину содержимого между FieldSeparator и FieldEnd - начальная позиция плюс рассчитанная длина будет конечное положение.

Раскрытие информации: я работаю в команде Aspose.Words.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...