项目中的功能,大概是这样,
要在站内发送通知,表单大概是 通知标题,通知时间,发送单位等,最重要的就是一个通知正文,正文使用富文本实现(这个使用wangeditor实现),点击保存后这些信息保存在后台,用户登录进来后会展示发送给自己的通知,因为富文本保存的就是html,所以展示也很好做,直接显示在页面就可以。
后续的话加了一个导出的功能,导出的字段包括 通知标题,通知时间,发送单位,还有就是通知正文。除去通知正文的话,还是很好做的,直接定义一个模板,然后用easypoi向模板中填充信息就可以,唯独是这个富文本,由于是html内容,直接填充进模板中显示的也是html,然后开始着手解决这个问题,网上搜了很多资料,大概的意思都是把html 通过 POIFSFileSystem 写进文件中,这样虽然能实现功能,但是有很多地方不太好。
1.文件打开之后是web版式,看起来不太好
2.导出的其实还是一个html
上边这两点其实都还好,最难的是,如果你的富文本包含图片的话,那就比较难搞了。
因为导出的这个html本质上还是一个html,而html 中图片肯定是这样
<img src="http..."/>
如果电脑在不联网的情况下,或者图片不存在的情况下,word中的图片会显示不出来,这是最致命的。
然后继续搜索资料的时候就发现了Spire.Doc for Java(收费的,也有免费版),而且完美实现了我想要的功能
免费版 Free Spire.Doc for Java | 100% 免费 Java Word 组件
我的功能就是按照模板生成文档,然后在生成的文档后插入正文内容,大概代码如下
HashMap<String, Object> resData = new HashMap<>();
//需要填充到模板的信息
resData.put("data",data);
//查询模板
File template = new File("模板");
//3.生成文档
InputStream inputStream = new ByteArrayInputStream(template.getFileBytes());
Document doc = new Document();
doc1.loadFromStream(inputStream,FileFormat.Doc);
//定位到书签"SimpleBookmark"
BookmarksNavigator bookmarkNavigator = new BookmarksNavigator(doc);
bookmarkNavigator.moveToBookmark("SimpleBookmark");
//使用文本替换原书签的内容, false表示不保留原来的格式
bookmarkNavigator.replaceBookmarkContent("这是要替换的信息", true);
//在文档后 添加 html
Section lastSection = doc.getLastSection();
lastSection.addParagraph().appendHTML("");
//保存文档
doc.saveToFile("xxx.doc", FileFormat.Doc);
大概就是这样,word 生成完之后 导出就很容易了,这里不在写导出代码
文档导出后,大概是这样
当然,他能做的不止这些,还有好多功能,比如合并文档,添加也没页脚 等等等等,大家可以直接访问他的官网帮助文档