定位一段文字在word文档哪个章节下面

如何定位一段文字在word文档的哪个章节下面,首先需要知道如何找到word文档的章节,poi中没有提供获取章节的api,只能通过段落来找到样式名字,如果样式名字包含heading,则说明这是一个标题,该标题下方的文字就属于这个章节

获取样式名

    private String getStyleName(XWPFDocument document, XWPFParagraph paragraph) {
        String styleId = paragraph.getStyleID();
        if (StringUtils.isNotEmpty(styleId)) {
            XWPFStyle style = document.getStyles().getStyle(styleId);
            return style.getName();
        }
        return "";
    }

判断该段落是否标题

    private boolean isHeadTitle(XWPFDocument document, XWPFParagraph paragraph) {
        String styleName = getStyleName(document, paragraph);
        return styleName.toLowerCase().startsWith("heading");
    }

接下来就简单了,我们通过遍历文档段落,查找该段落中是否包含指定文字,如果包含则说明该段文字属于该章节,很多人可能会去使用document.getParagraphs来遍历文档,但是这种方式只能获取段落内容,如果文档中包含表格则获取不到,所以为了完整的遍历文档可以使用XWPFWordExtractor这个类来提取文字

    private String searchChapter(XWPFDocument document, String text) {
        XWPFWordExtractor extractor = new XWPFWordExtractor(document);
        StringBuilder sb = new StringBuilder();
        List<IBodyElement> bodyElements = document.getBodyElements();
        String latestTitle = "";
        for (IBodyElement element : bodyElements) {
            if (element instanceof XWPFParagraph) {
                XWPFParagraph paragraph = (XWPFParagraph) element;
                if (isHeadTitle(document, paragraph)) {
                    latestTitle = paragraph.getText();
                    sb.setLength(0);
                }
            }
            extractor.appendBodyElementText(sb, element);
            sb.append('\n');
            if (sb.toString().contains(text)) {
                return latestTitle;
            }
        }
        return "";
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值