# export_word_plugin **Repository Path**: zhengweishan/export_word_plugin ## Basic Information - **Project Name**: export_word_plugin - **Description**: 导出word插件,支持富文本导出到word中。 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 18 - **Forks**: 10 - **Created**: 2017-05-11 - **Last Updated**: 2025-02-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #export-word-plugin ## 基本介绍: ## 使用java语言开发,依赖freemarker。该插件支持直接客户端调用,也支持web应用。 WordGeneratorWithFreemarker是插件对外提供的一个工具类,也是用户使用插件必要的一个类。该类对外提供四个方法 - createDoc(String templatePath, String templateName, Map dataMap, String outPath) - /** * 创建doc文件 * @param templatePath 模板所在路径 xxx/xxx/template * @param templateName 模板名字 xxx.ftl * @param dataMap 数据集合 * @param outPath 输出文件路径 xxx/xxx/xxx.doc */ - createRichHtmlHandler(RichObject richObject) - /** * 创建富文本Html处理器,主要处理图片及编码 * @param richObject 需要的参数 * @return */ - getImagesBase64String(List richHtmlHandlerList) - /** * 获取图片的64位字符串 * @param richHtmlHandlerList * @return */ - getXmlImgHref(List richHtmlHandlerList) - /** * 获取图片在xml中的端路径 * @param richHtmlHandlerList * @return */ ## 基本原理: ## 由于我们是要用word来解析带图片的富文本(说白了就是解析一段html,当然这段html代码是包含img标签:图片),so...传统的word模板导出(word另存为xml,在修改后缀为ftl)是行不通的,因为他解析不了html代码(至少我目前没有找到这方便的解决方案,大神勿喷~),这样的话我就要换用一种模板来处理这个模板:word模板另存为mht格式,再修改后缀为ftl。剩下的就是后台操作了,找到你存富文本的字段(html代码)获取里面的img标签,找到图片,并把图片解析为base64字符串,填充到我们只做的模板上就ok了。 ## 使用场景: ## 比较小众化,比如公司要生成合同导出,生成电子凭据等。 ## 使用步骤: ## 参看ClientExample.java这个类。 1、 获取富文本 > //创建富文本 > StringBuilder sb = new StringBuilder(); > sb.append("
"); > sb.append(""); > sb.append("
wesley 演示 导出富文本!@@#######¥¥%%%%………………&&&**~~~~~~&&&&&&&&、、、、、、、、"); > sb.append("
----多图分割线---"); > sb.append("
"); > sb.append("
中国梦,幸福梦!"); > sb.append("
"); 2、创建RichHtmlHander(处理富文本) > RichObject richObject = new RichObject(); > richObject.setHtml(sb.toString()); > //--------------------此处可以spring配置文件配置,也可以直接读取属性文件获取------------------ > //从mht文件中找 > richObject.setDocSrcLocationPrex("file:///C:/268D4AA4"); > richObject.setDocSrcParent("word.files"); > richObject.setNextPartId("01D2C8DD.BC13AF60"); > > richObject.setShapeidPrex("_x56fe__x7247__x0020"); > richObject.setTypeid("#_x0000_t75"); > richObject.setSpidPrex("_x0000_i"); > > richObject.setWebAppliction(false); > > //----------------------------------------- > > RichHtmlHandler richHtmlHandler = WordGeneratorWithFreemarker.createRichHtmlHandler(richObject); 3、 生成图片在word中的64位编码 4、 生成图片在word中的短路径 > List(); > richHtmlHandlerList.add(richHtmlHandler); > WordGeneratorWithFreemarker.getXmlImgHref(richHtmlHandlerList); > WordGeneratorWithFreemarker.getImagesBase64String(richHtmlHandlerList); 5、利用freemarker导出数据 > String docFilePath = "w:\\temp_by_wesley.doc"; > String templatePath = Class.class.getResource("/ftl").getPath(); > templatePath = java.net.URLDecoder.decode(templatePath,"utf-8");//这里我的路径有空格添加此处理 > logger.debug("------templatePath-------"+templatePath); > WordGeneratorWithFreemarker.createDoc(templatePath,"word.ftl",data,docFilePath); 6、导出效果图: ![](http://i.imgur.com/B7mS3bl.png)