请教大佬 , POI 5.x 如何读取 docx 文件中文本框的内容并修改?

2022-07-03 18:18:58 +08:00
 coderstory

问题: 需要实现一个替换 docx 内文本的功能,但是目前 docx 中文本框的内容读取不到

开发环境

  1. springboot 2.x
  2. poi 5.2.2 poi-ooxml 5.2.2

实现代码


    public void changeText(XWPFDocument document, Map<String, String> textMap) {
        // 替换页眉
        for (XWPFHeader xwpfHeader : document.getHeaderList()) {
            for (XWPFParagraph paragraph : xwpfHeader.getParagraphs()) {
                replaceParagraph(paragraph, textMap);
            }
        }
        // 替换页脚
        for (XWPFFooter xwpfFooter : document.getFooterList()) {
            for (XWPFParagraph paragraph : xwpfFooter.getParagraphs()) {
                replaceParagraph(paragraph, textMap);
            }
        }

        document.getBodyElements();

        // 替换段落内的文本信息
        List<XWPFParagraph> documentParagraphs = document.getParagraphs();
        for (XWPFParagraph xwpfParagraph : documentParagraphs) {
            replaceParagraph(xwpfParagraph, textMap);
        }
        .....(省略)

其中 document.getParagraphs() 应该能读取 word 中所有段落的数据,但是很遗憾没有找到任何文本框中的段落或文本。我也没找到相关单独读取文本框对象的方法。

idea 断点调试把 XWPFDocument 对象中的数据翻了一个边也只找到普通的不在文本框里的文本。

现在有点懵,不知道怎么处理了。

1563 次点击
所在节点    Java
2 条回复
coderstory
2022-07-03 18:49:14 +08:00
好像普通的付费无法读取 文本框的内容

```java
CTBody ctbody = document.getDocument().getBody();
XmlCursor xmlcursor = ctbody.newCursor();
```

好像只能使用光标 一段一段读取 原始数据的方式 米有现成封装好的代码
拿到 txbxContent 对象后又不清楚怎么处理了
orangie
2022-07-03 20:29:59 +08:00
好像 stackOverflow 上一搜就有,/questions/46802369/replace-text-in-text-box-of-docx-by-using-apache-poi

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/863786

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX