`
uu011
  • 浏览: 30722 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

详解FreeMarker生成复杂Word文档

    博客分类:
  • java
 
阅读更多
http://www.java.sh/web/freemarker/2012/02/5f84f4d93550710101355ad226780046.html
客户要求用程序生成标准的word文档,要能打印,而且不能变形,以前用过很多解决方案,都在客户严格要求下牺牲的无比惨烈。

  POI读word文档还行,写文档实在不敢恭维,复杂的样式很难控制不提,想象一下一个20多页,嵌套很多表格和图像的word文档靠POI来写代码输出,对程序员来说比去山西挖煤还惨,况且文档格式还经常变化。

  iText操作Excel还行。对于复杂的大量的word也是噩梦。

  直接通过JSP输出样式基本不达标,而且要打印出来就更是惨不忍睹。

  Word从2003开始支持XML格式,用XML还做就很简单了。

  大致的思路是先用office2003或者2007编辑好word的样式,然后另存为xml,将xml翻译为FreeMarker模板,最后用java来解析FreeMarker模板并输出Doc。经测试这样方式生成的word文档完全符合office标准,样式、内容控制非常便利,打印也不会变形,生成的文档和office中编辑文档完全一样。

  看看实际效果

  首先用office【版本要2003以上,以下的不支持xml格式】编辑文档的样式,图中红线的部分就是我要输出的部分:



  将编辑好的文档另存为XML





  再用Firstobject free XML editor将xml中我们需要填数据的地方打上FreeMarker标记



  最后生成的文档样式





  主要程序代码:


?code 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 import java.io.BufferedWriter; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.Writer; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import freemarker.template.Configuration; import freemarker.template.Template; import freemarker.template.TemplateException; public class DocumentHandler { private Configuration configuration = null; public DocumentHandler() { configuration = new Configuration(); configuration.setDefaultEncoding("utf-8"); } public void createDoc() { //要填入模本的数据文件 Map dataMap=new HashMap(); getData(dataMap); //设置模本装置方法和路径,FreeMarker支持多种模板装载方法。可以重servlet,classpath,数据库装载, //这里我们的模板是放在com.havenliu.document.template包下面 configuration.setClassForTemplateLoading(this.getClass(), "/com/havenliu/document/template"); Template t=null; try { //test.ftl为要装载的模板 t = configuration.getTemplate("test.ftl"); } catch (IOException e) { e.printStackTrace(); } //输出文档路径及名称 File outFile = new File("D:/temp/outFile.doc"); Writer out = null; try { out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile))); } catch (FileNotFoundException e1) { e1.printStackTrace(); } try { t.process(dataMap, out); } catch (TemplateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * 注意dataMap里存放的数据Key值要与模板中的参数相对应 * @param dataMap */private void getData(Map dataMap) { dataMap.put("author", "张三"); dataMap.put("remark", "这是测试备注信息"); List _table1=new ArrayList (); Table1 t1=new Table1(); t1.setDate("2010-10-1"); t1.setText("制定10月开发计划内容。"); _table1.add(t1); Table1 t2=new Table1(); t2.setDate("2010-10-2"); t2.setText("开会讨论开发计划"); _table1.add(t2); dataMap.put("table1", _table1); List _table2=new ArrayList (); for(int i=0;i<5;i++) { Table2 _t2=new Table2(); _t2.setDetail("测试开发计划"+i); _t2.setPerson("张三——"+i); _t2.setBegindate("2010-10-1"); _t2.setFinishdate("2010-10-31"); _t2.setRemark("备注信息"); _table2.add(_t2); } dataMap.put("table2", _table2); } }
分享到:
评论

相关推荐

    freemarker模板技术生成复杂word文档---解决了编码问题

    经测试这样方式生成的word文档完全符合office标准,样式、内容控制非常便利,打印也不会变形,生成的文档和office中编辑文档完全一样。 word的几个主要xml标志 w:body 正文内容 w:p 一个段落 w:tbl 表格数据 w...

    java使用freemarker生成复杂的word文档

    Java中的Freemarker是一个强大的模板引擎,常用于生成动态HTML、XML或文本文件,而这里我们讨论的是如何利用Freemarker生成复杂的Word文档。...通过学习和实践,你可以灵活地构建满足各种需求的文档生成系统。

    springboot中使用freemarker动态生成word文档,以及使用POI导出自定义格式Excel

    Springboot项目中: 1. 使用Apache POI 3.9 自定义样式导出Excel文件...2. 使用freemarker动态生成word .doc文档(带图片Word以及复杂格式word) 详细说明见个人博客及 github: https://github.com/DuebassLei/excel-poi

    freemarker模板生成word文档完整代码

    最近在做一个出卷系统,需要通过试卷模板从数据库中抽取题目,然后按照模板的样式生成完整的试卷,包括试卷格式的排版和图片的写入。这是用freemarker模板生成word文档。里面包括完整代码和所需jar包。

    完美解决方案:Java生成复杂Word文档.doc

    Java 代码可以实现 Word 文档生成,例如使用 FreeMarker 模板生成 Word 文档,使用 Configuration 对象设置模板装载方法和路径,使用 Template 对象生成 Word 文档。 知识点6: FreeMarker 模板的使用 FreeMarker ...

    freemarker生成复杂word

    POI读取Word文档比较适合、对于生成文档样式比较难控制,iText操作Excel还可以,对Word的操作功能有限,JACOB操作Word实现复杂,并且无法将服务部署到Linux平台,要求安装office,对于实现固定格式的报表实现困难,...

    FreeMarker生成word文件

    FreeMarker 是一个强大的模板引擎,常用于Web应用中动态生成HTML或其他类型的文本。在Java开发中,它也可以用来生成Word文档,提供了一种简洁...通过熟练掌握这些知识点,开发者可以创建灵活且动态的Word文档生成系统。

    用Freemarker生成word文档

    ### 使用Freemarker生成Word文档的关键...这种方法极大地提高了文档生成的效率和灵活性,适用于各种需要批量生成标准化文档的场景。同时,这种方式还支持更复杂的逻辑处理和条件判断,可以根据实际需求进行定制化开发。

    java利用freemarker生成word.pdf

    Java 利用 Freemarker 生成 Word.pdf,这个标题告诉我们,我们将使用 Java 语言和 Freemarker 库来生成 Word 文档,并将其导出为 PDF 文件。 描述解释 在描述中,我们可以看到,整个过程可以分为三步:首先,我们...

    freemarkerdemo 生成word 插入图片

    在这个"freemarkerdemo生成word插入图片"的示例中,我们主要探讨如何利用Freemarker来创建Word文档,并且将图片集成到这些文档中。这个过程涉及到几个关键的技术点: 1. **Freemarker基础知识**:Freemarker是一个...

    利用FreeMarker生成word文件例子

    可以使用Java的`DOM`、`SAX`或`JAXB`等解析XML,将解析后的数据结构作为FreeMarker的输入,从而生成复杂的Word文档。 ### 实际应用 生成Word文档的场景广泛,如报告生成、合同模板、批量邮件等。FreeMarker的灵活性...

    freemarker + xml模板动态生成word 文档 源码

    Freemarker动态生成word,包含文字替换,freemarker嵌入自定义java函数,动态生成表格列,插入图片的示例,同时使用spire将wordxml格式转换成word文档(doc格式),还包含文件下载示例

    Freemarker + XML 生成word文档

    Freemarker + XML 生成word 文档 。具体步骤先用word做好模板,然后另存为xml 2003 版本的,修改后缀为.ftl文件。在文件中加入需要处理的循环标签 。一般是在开始的前面。

    freemarker无损生成word

    在Java开发中,FreeMarker是一个强大的模板引擎,常用于生成动态HTML、XML、电子邮件等文本。本主题聚焦于如何利用...通过熟练掌握FreeMarker模板语法和适当的转换工具,开发者可以构建出高效、易维护的文档生成系统。

    使用Java-freemarker生成word文档.doc

    在Java开发中,有时我们需要生成动态的Word文档,例如报告、合同或证书等。`Java-Freemarker`是一个强大的模板...这个过程大大简化了动态生成Word文档的复杂性,使得开发者可以专注于业务逻辑,而不是文档的格式细节。

    Freemarker导出word示例,包括jfreechart图表

    在本示例中,Freemarker被用于生成Word文档,实现数据与模板的结合,使得动态生成Word文档变得更加简单。 首先,让我们深入了解Freemarker的工作原理。Freemarker模板由纯文本组成,其中包含特定的控制结构,如`...

    freemarker 生成word,支持一个单元格生成多张图片

    总的来说,通过FreeMarker和Apache POI的结合,我们可以灵活地生成包含复杂内容,如多张图片的Word文档。这种方法尤其适用于批量生成个性化报告或合同等文档,极大地提高了工作效率。在实际项目中,还可以根据需求...

    java+Freemarker生成word

    Java结合Freemarker生成Word文档是一项常见的技术应用,主要用于动态生成具有复杂格式的报告或文档。在企业级应用中,这种技术尤其有用,因为它允许开发者根据数据库或其他数据源中的信息自动生成Word文档,无需手动...

    freemarker根据word模板生成word的完整示例

    接下来,我们需要创建一个Java类,通常是主程序类(如`Test.java`),来执行模板处理和Word文档生成。这个类需要做以下几件事: 1. **加载模板**:使用`Configuration`对象加载XML模板文件。配置对象需要设置正确的...

    Freemarker生成word文档

    本篇将详细介绍如何利用Freemarker、XML以及Java来生成包含文字、图片等复杂元素的Word文档。 1. Freemarker基础 Freemarker是一个基于模板的语言,它允许开发者定义模板,然后在运行时用数据模型填充这些模板。...

Global site tag (gtag.js) - Google Analytics