java生成word有什么好的方式?

最近项目遇到要生成word文档,我最开始用的是poi,中途发现poi对word的支持不是很好,于是我又用了Jacob,这个是能做出想要的样子,但是Jacob启动office进程速度很慢,如果打开一个有问题的word文档的话,office会在服务器上弹出一个提示框,这样java就关闭不了这个进程。现在我准备把word另存为XML后然后用free marker来生成,想知道有没有大神知道word的XML语法的文档啊,或者是更好的生成word的方法。

兼容性最好当然是jni调用office vba,微软官方的支持。