POI 替换word2003 页眉页脚中的内容

发布于 2021-11-30 13:29:04 字数 1324 浏览 962 评论 8

用POI 替换word(2003)中模板标签的时候遇到了问题,请教各位是否也遇到过? 怎么解决的?

测试的文件中:页眉:  测试页面{header}     页脚: 测试页脚{footer}
测试的代码如下:

public class TestClass {

    public static void main(String[] args) throws Exception {

        Map<String, String> tags = new HashMap<String, String>() {{
            put("header", "page header");
            put("footer", "page footer");
        }};

        HWPFDocument doc = new HWPFDocument(new POIFSFileSystem(new FileInputStream("e:\test1.doc")));
        // getHeaderStoryRange 获取到的内容包括:页眉、页脚
        Range range= doc.getHeaderStoryRange();        
        for (Map.Entry<String, String> entry : tags.entrySet()) {
            range.replaceText("{" + entry.getKey() + "}", entry.getValue());
        }
        //? 1. 测试中发现只要替换的值和文件中标签长度不一致就会导致页眉页脚错乱(比如页脚跑到页眉了,或者页眉有部分跑到页脚了)
        //? 2. 用于获取页脚的代码 doc.getFootNoteRange() 取不到内容
        
        OutputStream os = new FileOutputStream("e:\write.doc");
        doc.write(os);
        os.close();
    }
}



问题已经在代码中描述了,再写一遍:
 1. 测试中发现只要替换的值和文件中标签长度不一致就会导致页眉页脚错乱(比如页脚跑到页眉了,或者页眉部分内容跑到页脚了)
 2. 本想用 doc.getFootNoteRange() 替换也就,发现取不到内容

注:  只是 word 2003 格式

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

静谧 2021-11-30 16:51:09

不行的话只能用
JACOB 试试了

醉生梦死 2021-11-30 16:51:09

我也是这个情况,图片显示不出来了

倚栏听风 2021-11-30 16:41:24

没找到解决办法,用了 jacob调用 vba替换了。但执行效率是问题……

月亮是我掰弯的 2021-11-30 16:22:12

但是jacob需要依赖office,如果服务器不允许安装office就无法使用…………

绝情姑娘 2021-11-30 16:10:15

回复
由于不能依赖office,我最终选用了调用openOffice的API完成功能,但是当存在较为复杂的页眉页脚时,转换后的分页效果会有点问题,经检查发现是openOffice的功能造成……

伴我心暖 2021-11-30 15:48:02

回复
换 liberoffice 试试,比openoffice效果好

女中豪杰 2021-11-30 15:11:47

@________- 我试一下,thx

挽清梦 2021-11-30 14:15:04

关注一下,遇到了同样的问题,替换后会造成页眉页脚的位置错位,如果替换的内容长度过长则出现了页码错误

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文