java html转word的坑 poi样式丢失还乱码
项目需要将富文本内容导出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样式丢失还乱码相关推荐
- POI-TL生成带有表格word的坑 POI重复依赖
poi-tl(poi template language)是一个基于Apache POI的Word模板引擎,也是一个免费开源的Java类库. 官方文档:http://deepoove.com/poi- ...
- java如何解析word大纲_Java POI 解析word文档
实现步骤: 1.poi实现word转html 2.模型化解析html 3.html转Map数组 Map数组(数组的操作处理不做说明) 1.导jar包. 2.代码实现 package com.web.o ...
- 完美恢复Word文档,丢失、乱码和受损三大症状不再是难题
时下,电脑使用越发广泛,我们在工作中,也会常常使用到Word.EXCEL.PPT等文档.有时候我们在编辑完Word文件后,习惯地戳了右上角的×键,再点击保存.然而俗话说的好,吃饭就没有不掉米粒的.有点 ...
- java poi 读取 word图片_Java Poi 根据文字内容 插入 word 图片-Go语言中文社区
需求描述 如下图,我需要在word里根据一个图片的名字,将名字替换成该图片(公章) 思路: 用POI遍历每一个表格里的每一行的每一个单元格,如果遇到我自己定义的"&章",则 ...
- java 操作 word 表格和样式,java读取word表格中的表格 java如何读取word中的excel表格数据...
Java 利用poi 可以直接读取word中的表格保持样式生1.读取word 2003及word 2007需要的jar包 读取 2003 版本(.doc)的word文件相对来说比较简单,只需要 poi ...
- java 读取ppt文件_java使用poi读取ppt文件和poi读取excel、word示例
Apache的POI项目可以用来处理MS Office文档,codeplex上还有一个它的.net版本.POI项目可创建和维护操作各种基于OOXML和OLE2文件格式的Java API.大多数MS O ...
- java word转html 乱码 poi,java word转html poi
java word转html poi [2021-01-29 15:50:39] 简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace(&q ...
- Java实现根据Word模板填充表格数据(poi方式),以及doc和docx转PDF,最全最详细版本,解决外部引用jar在linux上报ClassNotFound的问题。
Java实现根据Word模板填充表格数据(poi方式),以及doc和docx转PDF,最全最详细版本,解决外部引用jar在linux上报ClassNotFound的问题. 适用场景: 1.固定格式的W ...
- Java操作Excel三种方式POI、Hutool、EasyExcel
Java操作Excel三种方式POI.Hutool.EasyExcel 1. Java操作Excel概述 1.1 Excel需求概述 1.2 Excel操作三种方式对比 2. ApachePOIExc ...
- 怎么用Java来操作Word和Excel?
Java操作word文档 Java 操作word,对word文档进行读写时,主要用 Apache写的POI这个工具类,网上有POI对用的API和文档,在自己实际的项目中可以查找对应的API进行对应的操 ...
最新文章
- ajax提交后立刻刷新,Ajax提交表单页面刷新很快的解决方法
- MySql查找几个字段的值一样的记录
- 5_1 大理石在哪儿(UVa10474)排序与查找
- 优化mysql插入数据_优化MySQL插入方法的五个妙招
- matlab 可变参数与默认参数设置
- 我在试验Memcached,你的项目怎么处理缓存?
- 数据结构-查找-折半查找-二叉排序树查找
- NetBean中添加tomcat时候出现错误
- 免费下载3小时学会Excel数据处理视频教程
- E1630加工散热孔:中兴路由器wifi6千兆E1630电信商企版Wi-Fi6路由器3000M全千兆
- EduSoho教育周报(0805-0811)
- Linux系统优化篇
- 配置aconda_重装windows系统后配置Anaconda
- 你知道怎么给客户朋友圈点赞吗?
- Java操作Word文档
- win10关闭系统更新后,还会提示更新
- django Mezzanine uwsgi nginx 配置
- 扫地机器人噪音响_硬件老兵拆机分析:扫地机器人噪音大小到底与何相关?
- 牛客网软件测试面试题总结
- USB接口测试器--USB2.0/USB3.0信号检测器