这里需要注意的是:依赖的版本号都是一一对应的,如果使用不兼容的版本号,可能会报编译异常和缺少类的错误,这里已提供对应的所需依赖和版本号,大家可以参考一下。

具体的api文档可以参考官网api,很好理解:http://deepoove.com/poi-tl/#_license

前言

一开始业务的需求只是导出基本的文本框字段,这对我们大多数程序员来说都没有啥大问题,最常见的方式大概分为三种

第一种是将word模板设置成ftl格式,然后再进行标签替换。(缺点:标签太为复杂)

第二种则是通过esaypoi进行word模板导出,但是遇到有富文本框的数据,则就不咋好使了

第三种,则是今天要分享给大家的,也是我项目里所用的,通过poi-tl组件进行word导出。

难点剖析

  • 由于富文本存入数据库的字符串是带有html元素标签的,所以使用doc为文件为导出模板是不行的,它无法将这种字符串翻译成html的形式,只会展示出带有html标签的字符,所以需要重新构建模板文件使得它能支持html文本
  • 富文本如果含有图片,需要进行额外的处理

解决步骤

  1. 首先我们需要导入所需要用到的依赖。

    <dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.12.0</version><exclusions><exclusion><groupId>xalan</groupId><artifactId>xalan</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.2.2</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.2</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>5.2.2</version></dependency>

这里需要注意的是:依赖的版本号都是一一对应的,如果使用不兼容的版本号,可能会报编译异常和缺少类的错误,这里已提供对应的所需依赖和版本号,大家可以参考一下。

具体的api文档可以参考官网api,很好理解:http://deepoove.com/poi-tl/#_license

2.接下来就需要准备我们的word模板了

这里的富文本框就是用普通的文本占位符来写:{{remarkVo.baseInfo}}

这里的remarkVo,是我对象里包含了一个对象,baseInfo是remarkVo里的属性,如果只有一个对象信息,则可以直接使用属性值即可。

@Data
@ApiModel
public class DeclareExportWordVo {/***富文本框信息*/@ApiModelProperty("富文本框信息")private DeclareRemarkVo remarkVo = new DeclareRemarkVo();
}
@Data
@ApiModel
public class DeclareRemarkVo {/*** 基本情况*/@ApiModelProperty("基本情况")private String baseInfo;/*** 申报理由*/@ApiModelProperty("申报理由")private String declareReason;/*** 工作基础*/@ApiModelProperty("工作基础")private String workBase;
}

模板准备好后,其实就已经成功了一大半了,代码非常的简单,按照api中的要求来写即可。

3.接下来就是进行数据的导出了

//数据源
DeclareExportWordVo wordVo = new DeclareExportWordVo()//这个,就是我们导出html格式文件需需要的模板渲染HtmlRenderPolicy htmlRenderPolicy = new HtmlRenderPolicy();//将存储的html字段进行渲染Configure configure = Configure.builder().bind("remarkVo.baseInfo", htmlRenderPolicy).bind("remarkVo.declareReason", htmlRenderPolicy).bind("remarkVo.workBase", htmlRenderPolicy).build();XWPFTemplate template = XWPFTemplate.compile(PropertyUtil.getProperty("D:\\template\\declare.docx", configure).render(wordVo);String fileName = "测试导出富文本框.docx";//这里是通过浏览器导出,当然,也可导出到本地磁盘里。response.setContentType("application/octet-stream");response.setHeader("Content-disposition", "attachment;filename*=utf-8''" +URLEncoder.encode(fileName, "UTF-8"));ServletOutputStream out = response.getOutputStream();BufferedOutputStream bos = new BufferedOutputStream(out);template.write(bos);bos.flush();out.flush();PoitlIOUtils.closeQuietlyMulti(template, bos, out);out.close();bos.close();response.flushBuffer();

好了,到这里,我们的富文本框导出word就算是完成了,是不是非常之简单,没有难度

我们来测试一下导出的结果吧。

测试代码:

public static void main(String[] args) throws IOException {DeclareExportWordVo wordVo = new DeclareExportWordVo();DeclareRemarkVo remarkVo = new DeclareRemarkVo();//测试插入表格remarkVo.setBaseInfo("<body id=\"tinymce\" class=\"mce-content-body \" data-id=\"8279503244305491\" spellcheck=\"false\"><p>阿打发斯蒂芬</p><table class=\"mce-item-table\"><tbody><tr class=\"firstRow\"><td width=\"145\" valign=\"top\"><br></td><td width=\"145\" valign=\"top\"><br></td><td width=\"145\" valign=\"top\"><br></td><td width=\"145\" valign=\"top\"><br></td><td width=\"145\" valign=\"top\"><br></td></tr><tr><td width=\"145\" valign=\"top\"><br></td><td width=\"145\" valign=\"top\"><br></td><td width=\"145\" valign=\"top\"><br></td><td width=\"145\" valign=\"top\"><br></td><td width=\"145\" valign=\"top\"><br></td></tr><tr><td width=\"145\" valign=\"top\"><br></td><td width=\"145\" valign=\"top\"><br></td><td width=\"145\" valign=\"top\"><br></td><td width=\"145\" valign=\"top\"><br></td><td width=\"145\" valign=\"top\"><br></td></tr><tr><td width=\"145\" valign=\"top\"><br></td><td width=\"145\" valign=\"top\"><br></td><td width=\"145\" valign=\"top\"><br></td><td width=\"145\" valign=\"top\"><br></td><td width=\"145\" valign=\"top\"><br></td></tr><tr><td width=\"145\" valign=\"top\"><br></td><td width=\"145\" valign=\"top\"><br></td><td width=\"145\" valign=\"top\"><br></td><td width=\"145\" valign=\"top\"><br></td><td width=\"145\" valign=\"top\"><br></td></tr><tr><td width=\"145\" valign=\"top\"><br></td><td width=\"145\" valign=\"top\"><br></td><td width=\"145\" valign=\"top\"><br></td><td width=\"145\" valign=\"top\"><br></td><td width=\"145\" valign=\"top\"><br></td></tr></tbody></table><p><br></p></body>");//测试插入图片remarkVo.setDeclareReason("<img class=\"main_img img-hover\" data-imgurl=\"https://img2.baidu.com/it/u=1688153644,1490540018&amp;fm=253&amp;fmt=auto&amp;app=120&amp;f=JPEG?w=650&amp;h=495\" src=\"https://img2.baidu.com/it/u=1688153644,1490540018&amp;fm=253&amp;fmt=auto&amp;app=120&amp;f=JPEG?w=650&amp;h=495\" style=\"width: 198px; height: 160px;\">");wordVo.setRemarkVo(remarkVo);HtmlRenderPolicy htmlRenderPolicy = new HtmlRenderPolicy();Configure configure = Configure.builder().bind("remarkVo.baseInfo", htmlRenderPolicy).bind("remarkVo.declareReason", htmlRenderPolicy).bind("remarkVo.workBase", htmlRenderPolicy).build();XWPFTemplate template = XWPFTemplate.compile("D:\\template\\declare.docx", configure).render(wordVo);template.writeAndClose(new FileOutputStream("D:\\template\\测试导出富文本框.docx"));}

导出word

word里的内容

好了,以上就是富文本的word导出,大家可以借鉴参考一下。

springboot导出富文本框数据到word相关推荐

  1. 【操作word】Java + POI导出富文本的内容到word文档

    这周工作中,遇到一个需求是需要将数据库中富文本内容导出到word文档里面,于是就采用POI技术实现了一下导出word文档的功能.(word文档是识别html内容的,所以富文本内容也自然能够识别.) 一 ...

  2. iframe 页面富文本框数据怎么保存_文字太多PPT怎么做都丑?估计是没注意这些细节!...

    秋叶 PPT 双 11 大促返场最后 1 天 全场精品课享年度超值价 千万别错过啦! 作者:洁洁 编辑:躺糖 大家好,我是洁洁! 作为每天倾听你们的困惑的小编之一,我 get 到了一个你们平常做 PP ...

  3. ios html富文本分页,富文本框与分页

    1.富文本框javascript UEditor, CKEditor,wangEditor 市面用得比较多的富文本框html 使用是的wangEditor,要学习的话能够去看它的官网 -> ht ...

  4. java 富文本 word_Java导出富文本到word

    源码地址: 背景 最近用java开发一个中车项目管理系统,里面有一个维修单word导出功能. 可用方案 在网上查找资料,总结出两种比较可行的方案. (1) 制作word模板,导出成mht文件(单页面网 ...

  5. 导出富文本格式word

    /*try {*//*** 关键地方* 生成word格式*//*POIFSFileSystem poifs = new POIFSFileSystem();DirectoryEntry directo ...

  6. vue--echarts 图标库、excel导出、面包屑组件、富文本框、地图、前端使用代理访问、监控生产环境or开发环境

    目录 一.echarts 图标库 1.echarts的基础 2.项目中的使用 二.execl导出 三.面包屑组件 四.富文本框 五.地图 六.vite 构建配置 七.后端未开跨域资源共享,前端使用代理 ...

  7. java freemarker 导出富文本到Word文档

    最近一直在加班 导致看到代码就想吐 今天抽出时间来记录一下 用freemaker导出富文本信息 之前使用freemaker导出图片等信息时 使用的是xml方式,不明白的 可以看 freemaker生成 ...

  8. mysql数据库存储富文本格式_使用格式将富文本框的数据存储到数据库

    我是wpf的新手,我想将富文本框的数据及其格式(斜体,彩色,粗体..)存储到数据库(Mysql)中.目前,当我保存数据时,格式化将被忽略.此外,当我将其从数据库加载回富文本框时,它会在同一行中显示所有 ...

  9. 【杂记】(富文本框回填值、ajax数据回填按钮年级学科、去除数组中数组外包的引号、多重循环的写法、微测评获奖页面的内容 循环拼接写法、textarea禁止拖动、html基本、透明度、页面内出现滚动条)

    1. 富文本框回填值 for(var i = 0;i<res.data.choiceoptinfo.length;i++){ueArr[i].ready(function(){//选项ueArr ...

最新文章

  1. 如何在Python中附加文件?
  2. linux | 网卡驱动
  3. dos进入/退出某文件夹
  4. Spread表格组件For JAVA功能介绍—表格相关操作
  5. Opencv SVM demo
  6. Golang 标准库--strings
  7. 潭州课堂25班:Ph201805201 并发(非阻塞,epoll) 第十课 (课堂笔记)
  8. VUE项目中使用this.$forceUpdate()强制页面重新渲染
  9. as3 primitives
  10. Alphabet旗下Sidewalk Labs试图通过比赛来打造智慧城市
  11. 我的世界服务器光影文件夹,我的世界光影怎么开?中国版介绍
  12. 50行Python代码制作一个计算器
  13. 可视化基础讲解之色彩搭配!
  14. 让更多的开发者听到您的声音,移动开发征文活动现已开始 | 开发者说·DTalk
  15. 迭代回溯的图最大团问题(可得到多组最优解)
  16. 北大AI公开课 第一讲
  17. IllegalArgumentException: error Type referred to is not an annotation type:
  18. 哈工大软件构造期末知识点总结
  19. 华为新系统鸿蒙何时亮相,终于!华为鸿蒙系统正式发布,P50亮相
  20. 乐学偶得python视频_乐学偶得 - 课程

热门文章

  1. targetSdkVersion 从22提到25 你需要知道的一切
  2. 【window操作】windows定时打开网页或程序
  3. 网易云音乐无法正常运行
  4. 最新软件工程师薪资大揭秘!你的薪资达到平均水平了吗?
  5. [Linux] 什么是 段错误(吐核)?
  6. 『XXG探索』canvas 获取图片主体颜色
  7. 逆战班-----javascript实现放大镜效果
  8. 如何远程控制他人电脑?
  9. svn服务端删除版本库_删除SVN目录及从服务器端删除SVN版本库文件方法详解
  10. FLUENT提供了9个湍流模型,教你如何选择