项目需要将富文本内容导出word,
最开始百度,找到poi导出,综合之后 就有了以下代码

public void exportWord(Integer id,HttpServletResponse response) throws Exception {ByteArrayInputStream bais = null;OutputStream ostream = response.getOutputStream();try {TBrCaseDoc doc = tBrCaseDocMapper.selectByPrimaryKey(id);String content = "<html><body>"+doc.getContent()+"</body></html>";bais = new ByteArrayInputStream(content.getBytes("utf-8"));//生成wordPOIFSFileSystem poifs = new POIFSFileSystem();DirectoryEntry directory = poifs.getRoot();directory.createDocument("exportWord", bais);//输出文件response.setCharacterEncoding("utf-8");//设置word格式String title = new String((doc.getTitle()+".docx").getBytes("utf-8"),"ISO8859-1");//解决标题中文变成下划线的问题response.setContentType("application/msword");response.setHeader("Content-disposition", "attachment;filename="+title);poifs.writeFilesystem(ostream);}catch(Exception e){//异常处理e.printStackTrace();}finally {if(bais!=null){bais.close();}if(ostream!=null){ostream.close();}}

初次测试成功之后就没管了,

后来正式和前端对接测试的时候发现,带有样式的导出有问题。

前端编辑是这样的

导出变成这样

无奈继续百度,都没有找到解决方案,但是偶然看到一个
“直接html文件把后缀改成doc”
于是试了一下,还成功了


只是视图模式默认是web,貌似还差点,于是继续百度word默认打开模式
感谢这位老铁的解决方案
https://blog.csdn.net/yiyelanxin/article/details/78466872
于是修改代码为

    String wordHtmlHead = "<html xmlns:v=\"urn:schemas-microsoft-com:vml\" xmlns:o=\"urn:schemas-microsoft-com:office:office\"\n" +"xmlns:w=\"urn:schemas-microsoft-com:office:word\" xmlns:m=\"http://schemas.microsoft.com/office/2004/12/omml\"\n" +"xmlns=\"http://www.w3.org/TR/REC-html40\"><head>\n" +"    <!--[if gte mso 9]><xml><w:WordDocument><w:View>Print</w:View><w:TrackMoves>false</w:TrackMoves><w:TrackFormatting/><w:ValidateAgainstSchemas/><w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid><w:IgnoreMixedContent>false</w:IgnoreMixedContent><w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText><w:DoNotPromoteQF/><w:LidThemeOther>EN-US</w:LidThemeOther><w:LidThemeAsian>ZH-CN</w:LidThemeAsian><w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript><w:Compatibility><w:BreakWrappedTables/><w:SnapToGridInCell/><w:WrapTextWithPunct/><w:UseAsianBreakRules/><w:DontGrowAutofit/><w:SplitPgBreakAndParaMark/><w:DontVertAlignCellWithSp/><w:DontBreakConstrainedForcedTables/><w:DontVertAlignInTxbx/><w:Word11KerningPairs/><w:CachedColBalance/><w:UseFELayout/></w:Compatibility><w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel><m:mathPr><m:mathFont m:val=\"Cambria Math\"/><m:brkBin m:val=\"before\"/><m:brkBinSub m:val=\"--\"/><m:smallFrac m:val=\"off\"/><m:dispDef/><m:lMargin m:val=\"0\"/> <m:rMargin m:val=\"0\"/><m:defJc m:val=\"centerGroup\"/><m:wrapIndent m:val=\"1440\"/><m:intLim m:val=\"subSup\"/><m:naryLim m:val=\"undOvr\"/></m:mathPr></w:WordDocument></xml><![endif]-->\n" +"</head>";@ResponseBody@RequestMapping("/word")public void exportWord(Integer id,HttpServletResponse response) throws Exception {OutputStream ostream = response.getOutputStream();try {TBrCaseDoc doc = tBrCaseDocMapper.selectByPrimaryKey(id);String content = wordHtmlHead+"<body>"+doc.getContent()+"</body></html>";response.setCharacterEncoding("utf-8");response.setContentType("application/msword");response.setHeader("Content-disposition", "attachment;filename="+new String((doc.getTitle()+".docx").getBytes("utf-8"),"ISO8859-1"));ostream.write(content.getBytes("utf-8"));ostream.flush();}catch(Exception e){//异常处理e.printStackTrace();}finally {if(ostream!=null){ostream.close();}}}

效果图

嗯,完美解决,,,(除了没解决图片问题,不过项目需求就是简单的公告文书导出,没有图片,那就不管了,感觉直接插入base64 应该可以,没试过)

java html转word的坑 poi样式丢失还乱码相关推荐

  1. POI-TL生成带有表格word的坑 POI重复依赖

    poi-tl(poi template language)是一个基于Apache POI的Word模板引擎,也是一个免费开源的Java类库. 官方文档:http://deepoove.com/poi- ...

  2. java如何解析word大纲_Java POI 解析word文档

    实现步骤: 1.poi实现word转html 2.模型化解析html 3.html转Map数组 Map数组(数组的操作处理不做说明) 1.导jar包. 2.代码实现 package com.web.o ...

  3. 完美恢复Word文档,丢失、乱码和受损三大症状不再是难题

    时下,电脑使用越发广泛,我们在工作中,也会常常使用到Word.EXCEL.PPT等文档.有时候我们在编辑完Word文件后,习惯地戳了右上角的×键,再点击保存.然而俗话说的好,吃饭就没有不掉米粒的.有点 ...

  4. java poi 读取 word图片_Java Poi 根据文字内容 插入 word 图片-Go语言中文社区

    需求描述 如下图,我需要在word里根据一个图片的名字,将名字替换成该图片(公章) 思路: 用POI遍历每一个表格里的每一行的每一个单元格,如果遇到我自己定义的"&章",则 ...

  5. java 操作 word 表格和样式,java读取word表格中的表格 java如何读取word中的excel表格数据...

    Java 利用poi 可以直接读取word中的表格保持样式生1.读取word 2003及word 2007需要的jar包 读取 2003 版本(.doc)的word文件相对来说比较简单,只需要 poi ...

  6. java 读取ppt文件_java使用poi读取ppt文件和poi读取excel、word示例

    Apache的POI项目可以用来处理MS Office文档,codeplex上还有一个它的.net版本.POI项目可创建和维护操作各种基于OOXML和OLE2文件格式的Java API.大多数MS O ...

  7. java word转html 乱码 poi,java word转html poi

    java word转html poi [2021-01-29 15:50:39]  简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace(&q ...

  8. Java实现根据Word模板填充表格数据(poi方式),以及doc和docx转PDF,最全最详细版本,解决外部引用jar在linux上报ClassNotFound的问题。

    Java实现根据Word模板填充表格数据(poi方式),以及doc和docx转PDF,最全最详细版本,解决外部引用jar在linux上报ClassNotFound的问题. 适用场景: 1.固定格式的W ...

  9. Java操作Excel三种方式POI、Hutool、EasyExcel

    Java操作Excel三种方式POI.Hutool.EasyExcel 1. Java操作Excel概述 1.1 Excel需求概述 1.2 Excel操作三种方式对比 2. ApachePOIExc ...

  10. 怎么用Java来操作Word和Excel?

    Java操作word文档 Java 操作word,对word文档进行读写时,主要用 Apache写的POI这个工具类,网上有POI对用的API和文档,在自己实际的项目中可以查找对应的API进行对应的操 ...

最新文章

  1. ajax提交后立刻刷新,Ajax提交表单页面刷新很快的解决方法
  2. MySql查找几个字段的值一样的记录
  3. 5_1 大理石在哪儿(UVa10474)排序与查找
  4. 优化mysql插入数据_优化MySQL插入方法的五个妙招
  5. matlab 可变参数与默认参数设置
  6. 我在试验Memcached,你的项目怎么处理缓存?
  7. 数据结构-查找-折半查找-二叉排序树查找
  8. NetBean中添加tomcat时候出现错误
  9. 免费下载3小时学会Excel数据处理视频教程
  10. E1630加工散热孔:中兴路由器wifi6千兆E1630电信商企版Wi-Fi6路由器3000M全千兆
  11. EduSoho教育周报(0805-0811)
  12. Linux系统优化篇
  13. 配置aconda_重装windows系统后配置Anaconda
  14. 你知道怎么给客户朋友圈点赞吗?
  15. Java操作Word文档
  16. win10关闭系统更新后,还会提示更新
  17. django Mezzanine uwsgi nginx 配置
  18. 扫地机器人噪音响_硬件老兵拆机分析:扫地机器人噪音大小到底与何相关?
  19. 牛客网软件测试面试题总结
  20. USB接口测试器--USB2.0/USB3.0信号检测器

热门文章

  1. ECTOUCH短信接口替换
  2. java计算机毕业设计中小型超市管理系统录像补源码+数据库+系统+lw文档+mybatis+运行部署
  3. 汽车硬件测试基准介绍
  4. C++编写的在控制台界面操作的吃豆子游戏的代码
  5. 看大神如何玩转微信小程序日历插件?
  6. 教程解读:游戏平台系统到底该如何搭建?
  7. 软件测试--移动应用主要针对软测比赛(教程)
  8. BadBoy安装与使用
  9. WPF实例系列一:登录、注册界面设计
  10. jquery消息插件 toastr 消息提示插件 弹框提示