这个错误是因为Apache POI的版本问题导致的。在较新的版本中,setBookmarkStartListsetBookmarkEndList方法已经被废弃。

你可以尝试使用addNewBookmarkStart()addNewBookmarkEnd()方法来替代。修改copyBookmarks方法的代码如下:

private static void copyBookmarks(XWPFDocument inputDoc, XWPFDocument outputDoc, String bookmarkName) {
    // 获取输入文件中的所有段落
    for (XWPFParagraph paragraph : inputDoc.getParagraphs()) {
        // 获取段落中的所有书签
        for (CTBookmark bookmark : paragraph.getCTP().getBookmarkStartList()) {
            // 判断书签名称是否匹配
            if (bookmark.getName().equals(bookmarkName)) {
                // 获取书签的开始和结束位置
                int bookmarkStart = paragraph.getCTP().getBookmarkStartList().indexOf(bookmark);
                int bookmarkEnd = paragraph.getCTP().getBookmarkEndList().indexOf(bookmark);

                // 创建新段落
                XWPFParagraph newParagraph = outputDoc.createParagraph();

                // 复制段落样式
                newParagraph.getCTP().setPPr(paragraph.getCTP().getPPr());

                // 复制段落中的所有文本
                for (XWPFRun run : paragraph.getRuns()) {
                    XWPFRun newRun = newParagraph.createRun();
                    newRun.setText(run.getText(0));
                }

                // 复制段落中的所有书签
                newParagraph.getCTP().addNewBookmarkStart().setName(bookmark.getName());
                newParagraph.getCTP().addNewBookmarkEnd().setId(bookmark.getId());
            }
        }
    }
}

这样修改后,应该就能够成功编译和运行了。

package word;import orgapachepoixwpfusermodelXWPFDocument;import orgapachepoixwpfusermodelXWPFParagraph;import orgapachepoixwpfusermodelXWPFRun;import orgopenxmlformatsschemaswordprocessingmlx2006main

原文地址: http://www.cveoy.top/t/topic/h15J 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录