`
jiulingchen
  • 浏览: 45143 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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

    博客分类:
  • JAVA
阅读更多

客户要求用程序生成标准的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格式】编辑文档的样式,图中红线的部分就是我要输出的部分:

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

  将编辑好的文档另存为XML

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

 

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

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

  最后生成的文档样式

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

 

  主要程序代码:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->package com.havenliu.document;
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&lt;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);
}
}
分享到:
评论

相关推荐

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

    本文档旨在解决 Java 生成复杂 Word 文档的问题,提供了一种完美的解决方案。该方案通过使用 Office 2003 或 2007 编辑 Word 文档的样式,然后将其另存为 XML 格式,接着使用 FreeMarker 模板生成 Word 文档。这种...

    java生成word文档完美解决方案.

    在Java开发中,生成Word文档是一项常见的需求,例如在报告生成、数据导出或合同制作等场景。...实际应用中,根据项目特性和需求选择合适的库,并灵活运用其提供的功能,就能实现Java生成Word文档的“完美解决方案”。

    Java根据ftl模板生成多表格复杂性word文档

    这表明它可能包含了一个完整的Java应用程序,该程序加载数据模型,解析FTL模板,然后使用Apache POI生成Word文档。用户可能只需要修改数据模型和FTL模板,即可满足自己的定制化需求。 在实际应用中,这样的解决方案...

    java 根据word模板生成word 文档

    ### Java生成Word文档技术解析与实现 在现代企业级应用中,动态生成Word文档的需求日益增多,尤其是在报表生成、文档自动生成等领域。Java作为一种广泛使用的编程语言,提供了多种方法来根据Word模板生成Word文档,...

    用java生成word文档方法

    在IT领域,特别是软件开发行业中,使用Java生成Word文档是一种常见的需求,特别是在自动化报告生成、文档模板填充等场景中。本文将深入探讨如何利用Java语言和相关库来实现这一功能,重点介绍Apache POI和一个相对...

    RtfTemplate实现Java生成word

    总的来说,RtfTemplate是一个强大的工具,它简化了Java生成Word文档的过程,使得开发者可以专注于数据处理和文档内容,而不是底层的文件操作。通过熟练掌握RtfTemplate的使用,可以大大提高开发效率,提升项目的质量...

    JAVA生成WORD工具类

    总的来说,Java生成Word文档是通过Apache POI库实现的,它提供了强大且灵活的功能,能够处理复杂的Word模版,包括图片和文本内容。这个“JAVA生成WORD工具类”简化了这一过程,使得开发者可以方便地在代码中动态创建...

    Java通过模版生成word文档

    本篇将深入探讨如何使用Java通过模板生成Word文档,以及相关的关键知识点。 一、模板引擎简介 模板引擎允许开发者定义好文档的结构和样式,然后在运行时填充数据,生成最终的Word文档。这种方式可以将数据逻辑与...

    Java使用iText生成word文件的解决方案

    在这个场景中,我们将主要关注其在生成Word文档方面的应用。 首先,要开始使用iText,你需要将其引入到你的项目中。在这个例子中,我们看到了三个相关的jar文件: 1. iText-2.0.8.jar - 这是iText的基础库,包含了...

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

    接下来,使用Freemarker API加载模板,设置数据模型,并生成Word文档: ```java // 创建配置 Configuration cfg = new Configuration(Configuration.VERSION_2_3_30); cfg.setDirectoryForTemplateLoading(new File...

    java使用jacob通过模板生成word文档完整项目

    Java使用Jacob库通过模板生成Word文档是一个常见的技术实践,尤其在企业级应用中,这种技术常用于批量生成报告、合同等文档。Jacob全称为Java Advanced COM Bridge,它为Java提供了与COM组件交互的能力,让我们可以...

    java生成word文档代码详解

    ### Java生成Word文档代码详解 #### 一、引言 在日常工作中,有时我们需要通过程序自动生成Word文档,尤其是在报表生成、数据导出等场景下。利用Java来生成Word文档不仅可以提高工作效率,还能确保文档的一致性和...

    java动态生成word文件Demo

    生成Word文档的基本步骤如下: 1. 引入Apache POI库:在项目中引入对应的Maven或Gradle依赖。 2. 创建Word文档对象:使用XWPFDocument类实例化一个Word文档对象。 3. 添加内容:利用XWPFParagraph、XWPFTable等类...

    自定义maven插件:自动生成API的word文档源代码

    总的来说,通过自定义的Maven插件生成API文档是一种高效、灵活的解决方案。开发者可以根据项目需求定制插件,实现自动化文档生成,从而提升团队的协作效率和项目质量。在实际开发中,这样的插件可以大大减轻开发人员...

    java编辑word文档工具源码

    2. 加载Word文档:使用`HWPFDocument`或`XWPFDocument`根据文件格式加载文档。 3. 遍历文档内容:通过`getParagraphs()`或`getTables()`等方法获取文档的各个部分。 4. 修改内容:对每个段落或表格进行操作,如更改...

    java生成word,包括word表格,表格插入图片,jar包都在了

    Java生成Word文档是一种常见的需求,特别是在企业级应用中,例如报告生成、数据导出等。在Java中,我们可以使用各种库来实现这个功能,比如Apache POI,它是一个开源项目,提供了API来处理Microsoft Office格式的...

Global site tag (gtag.js) - Google Analytics