如何获取整个段落的样式?

paragraphs.get(1).getParagraphFormat().getStyle().getFont().getColor()获取的不对,获取的貌似是默认段落的样式

@maochen

要获取整个段落的样式,您可以使用 ParagraphFormat 类来访问段落的格式设置。请确保您获取的是段落的实际样式,而不是默认样式。以下是一个示例代码,展示如何获取段落的样式属性,包括字体颜色:

// 假设您已经有一个 Document 对象
Document doc = new Document("您的文档路径.docx");

// 获取特定段落
Paragraph paragraph = doc.getFirstSection().getBody().getParagraphs().get(1);

// 获取段落格式
ParagraphFormat paragraphFormat = paragraph.getParagraphFormat();

// 获取段落的样式
Style style = paragraphFormat.getStyle();

// 获取字体颜色
Color fontColor = style.getFont().getColor();

// 输出字体颜色
System.out.println("段落字体颜色: " + fontColor);

在这个示例中,我们首先获取文档中的特定段落,然后通过 getParagraphFormat() 方法获取该段落的格式。接着,我们可以通过 getStyle() 方法获取段落的样式,并从中提取字体颜色。

请确保您在使用时替换文档路径和段落索引,以适应您的具体需求。如果您仍然遇到问题,请检查段落是否确实应用了特定样式,而不是使用默认样式。

实际测试获取不到设置的颜色

@maochen 能否在此提供您的文件以供测试?

感谢,已经解决,实际通过 paragraph.getListLabel().getFont().getColor()可以获取到

@vyacheslav.deryushev 我测试发现paragraph.getListLabel().getFont()可以获取段落的大部分样式,但是underline和StrikeThrough获取的都不是设置的值,获取border直接报错java.lang.RuntimeException: java.lang.IllegalStateException: Cannot change direct attributes on a list label. Paragraph doesn’t belong to a list.

@maochen 每个段落可以有多个运行,每个运行可以有自己的字体设置。ListLabel 仅定义标签参数。段落可以是列表项,也可以不是。

for (Paragraph paragraph : (Iterable<Paragraph>) doc.getChildNodes(NodeType.PARAGRAPH, true)) {
    // 使用列表。
    if (paragraph.getListFormat().isListItem()) {
        ListLabel label = paragraph.getListLabel();
        label.getFont().setUnderline(Underline.SINGLE);
        label.getFont().setStrikeThrough(true);
    }

    // 获取文本颜色。
    for (Run run : paragraph.getRuns()) {
        Color textColor = run.getFont().getColor();
    }
}

每个run的值是能够获取到,但是我需要获取到paragraph的underline值,无法获取么?实际paragraph中w:rPr也有这个w:u标签和value值double的

@maochen 该属性可能与 “ParagraphBreakFont ”有关。请尝试使用 paragraph.getParagraphBreakFont().getUnderline()

感谢,我也刚找到这个属性,确实可以拿得到 :+1:

1 Like