如何使用 Aspose Words for Android 获取内联词的超链接边界?

How to get hyperlink boundaries of inline words with Aspose Words for Androd?

android 应用程序使用 Aspose Words for Android 库阅读 Ms Word 文档中的段落和一些属性。它获取段落文本、样式名称并且是单独的值。段落行中有些词有超链接。如何获取单词超链接的开始和结束边界?例如:

This is an inline hyperlink paragraph example that the start bound is 18 and end bound is 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;
}

编辑: 谢谢Alexey Noskov,和你一起解决

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;
}

Hyperlink在 MS Word 文档中表示为字段。如果您在 MS Word 中按 Alt+F9,您将看到类似这样的内容

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

关注 link 以了解有关 Aspose.Words 文档模型和 MS Word 中字段的更多信息。 https://docs.aspose.com/display/wordsjava/Introduction+to+Fields

在您的情况下,您需要定位 FieldStart 的位置——这将是开始位置,然后测量 FieldSeparator 和 FieldEnd 之间内容的长度——开始位置加上计算的长度就是结束位置。

披露:我在 Aspose.Words 团队工作。