Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

wesley5201314/java-export-word-plugin

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

4 Commits

Repository files navigation

#export-word-plugin

基本介绍:

使用java语言开发,依赖freemarker。该插件支持直接客户端调用,也支持web应用。

WordGeneratorWithFreemarker是插件对外提供的一个工具类,也是用户使用插件必要的一个类。该类对外提供四个方法

  • createDoc(String templatePath, String templateName, Map<String, Object> 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("<div>");
 sb.append("<img style='height:100px;width:200px;display:block;' src='w:\2円.jpg' />");
 sb.append("</br><span>wesley 演示 导出富文本!@@#######\\%%%%..................&&&**~~~~~~&&&&&&&&、、、、、、、、</span>");
 sb.append("</br><span>----多图分割线---</span>");
 sb.append("</br><img style='height:100px;width:200px;display:block;' src='w:\1円.jpg' />");
 sb.append("</br><span>中国梦,幸福梦!</span>");
 sb.append("</div>");

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<RichHtmlHandlerrichHtmlHandlerList = new ArrayList<RichHtmlHandler>();
 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、导出效果图:

About

export-word-plugin

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

AltStyle によって変換されたページ (->オリジナル) /