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

freemarker制作复杂word模板

阅读更多

         最近项目遇到需要生成复杂word文档的功能。个人感觉poi对excel的操作强于对word的操作,jacob对写复杂的word来说操作量也比较大,网上看到有关freemarker制作word模板并能轻松导出,决定一试,果然方便,下面介绍下采用freemarker制作模板导出的步骤和方法。

         1、做好原始的word模板(按照自己的需求制作),下面是我项目中的需求模板

      

内容比较多(有多级表头,有图片等等),就不一一截图了。

             2、有了模板之后就可以开始进行变量的设置了,如上图中编制时间就可以修改成编制时间:${year}${month}${day}”。把所有需要动态设置的内容用变量替换。

             3、将处理好后的word文档另存为xml格式,‘Word 2003 XML文档(*.xml)’下载foxe_CHS.exe工具,打开处理好的xml格式文档。检查一遍是否所有的设置变量都确认无误(有时候在存储成xml文档的过程中,变量有可能会被拆分成几部分,如${year} 有可能被拆分成了'${ye'和'ar}',这时就需要自己去修改调整过来)



 
确认变量设置完成后,将文件存储为XX.ftl格式的文件。

 

             4、java后台模板载入:

  //设置模本装置方法和路径,FreeMarker支持多种模板装载方法.可以重servlet,classpath,数据库装载,
  //这里我们的模板是放在com/dse/gzzxhl/word/report/day包下面

  this.configuration = new Configuration();
  this.configuration.setDefaultEncoding("utf-8");
  configuration.setClassForTemplateLoading(this.getClass(), "/com/dse/gzzxhl/word/report/day");
  Template t=null;
  try {
   //shuiqingribao.ftl为要装载的模板
   t = configuration.getTemplate("xxx.ftl");
  } catch (IOException e) {
   e.printStackTrace();
   return false;
  }

             5、设置数据集

      dataMap.put("year",arr[0]);
      dataMap.put("month",Integer.parseInt(arr[1]));
      dataMap.put("day",Integer.parseInt(arr[2]));
      //生成雨情描述
      dataMap.put("yqdesc",getYqdesc(date,list0,list1,list2));
      //生成雨量统计数据集(暴雨以上量级)
      dataMap.put("yltjlist",getYltjList(list3));
      //雨情图片
       dataMap.put("jyurl", getImageStr("XXX.png"));
      //水情描述
      dataMap.put("sqdesc",getSqdesc(date,list4,list5,list6)[0]);
      //水情描述1
      dataMap.put("sqdesc1",getSqdesc(date,list4,list5,list6)[1]);
      //水情报警信息数据集
      dataMap.put("sqbjxxlist",sqbjxxlist); 

 

注意图片要用base64编码转换:方法如下

private String getImageStr(String url) {
        String imgFile = url;
        InputStream in = null;
        byte[] data = null;
        try {
         File file = new File(url);
         if(file.exists()){
          in = new FileInputStream(imgFile);
          data = new byte[in.available()];
          in.read(data);
          in.close();
         }
         else{
          System.out.println("文件"+url+"不存在!");
          return "";
         }
         } catch (IOException e) {
             e.printStackTrace();
         }
         BASE64Encoder encoder = new BASE64Encoder();
         return encoder.encode(data);
     }

 

          6、输出文档,代码如下:

String filePath = “XXX/XX/X"//要输出的路径

File outFile = new File(filePath);
  Writer out = null;
  try {
   FileOutputStream fos = new FileOutputStream(outFile);
      OutputStreamWriter oWriter = new OutputStreamWriter(fos,"UTF-8");
      out = new BufferedWriter(oWriter);  
  } catch (FileNotFoundException e1) {
   e1.printStackTrace();
   return false;
  }
  try {

//dataMap为设置好的数据集
   t.process(dataMap, out);
   return true;
  }
  catch (TemplateException e){
   e.printStackTrace();
   return false;
  }catch(IOException e1){
   e1.printStackTrace();
   return false;
  }
  finally{
   out.flush();
   out.close();
  }

          7、完成输出,生成文档。
 

  • 大小: 37.1 KB
  • 大小: 49.9 KB
  • 大小: 32 KB
分享到:
评论

相关推荐

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

    当涉及到多表格的复杂Word文档时,我们需要在FTL模板中定义多个表格,并在运行时填充这些表格的数据。FreeMarker支持多种数据类型,包括列表、映射等,这使得在模板中创建和操作表格变得简单。你可以通过迭代数据...

    Java后台的word生成

    - **创建模板**:在FreeMarker中创建一个Word模板,定义好文档的布局和样式,用`<#...>`标记来定义变量。 - **配置FreeMarker**:在Java项目中引入FreeMarker库,设置模板目录,加载模板文件。 - **准备数据模型*...

    JAVA项目代码绘制PDF和通过freemarker动态生成PDF

    # 本项目主要介绍 1. itextpdf(CreatePdf) 不太推荐需要在代码内部编写PDF格式,如果要使用,建议写个基类,将同一版本 或者同一类型的公共方法写入,差异化的抽象,一个模板一个子类...复杂word动态生成上功能很强大

    SSM+freemaker+jacob实现生成word文档并转换为PDF 另一个是错的

    在SSM项目中,FreeMarker模板可以用来生成Word文档的结构和内容。开发者通常会创建一个FreeMarker模板文件,其中包含固定的格式和占位符,然后在Java代码中填充数据,生成Word文档。 Jacob库的使用是为了在Java环境...

    合同/word模板生成

    在Word中直接添加这些元素是简单易行的,但在编程环境中,这可能需要额外的图像处理库,如Java的ImageIO或者第三方库,如FreeMarker或Thymeleaf,它们可以与Apache POI结合使用。 4. **PDF文档处理**: 虽然主要讨论...

    Java生成word文档(仅一个文档模板原件和转换后缀为.ftl格式文件)

    本主题聚焦于如何利用一个文档模板原件和将其转换为.ftl(FreeMarker)格式来生成动态的Word文档。FreeMarker是Java的一个模板引擎,常用于生成HTML、XML等静态或动态文本,但也可扩展到生成Word文档。 首先,理解...

    java通过模板生成 word

    Java 通过模板生成 Word 是一个常见的需求,尤其在企业级应用中,经常需要根据动态数据生成报告或合同等文档。这个过程通常涉及到使用特定库来处理 Word 文档的创建和编辑。本文将深入探讨如何使用 Java 实现这一...

    word-export:填充word模板

    在IT行业中,Word模板填充是一项常见的任务,尤其在自动化文档生成和报告制作中十分有用。这里我们关注的是一个名为"word-export"的项目,它利用了FreeMarker模板引擎来实现这个功能。FreeMarker是一个强大的、轻量...

    freemaker2word

    本项目"freemaker2word"专注于利用FreeMarker将数据转换为Microsoft Word文档,其中包括了图片和表格的处理,这对于那些需要自动化生成报告或者批量制作文档的场景非常实用。 在FreeMarker的工作原理中,它通过读取...

    firstobjct xml编辑器

    使用Freemarker模板引擎,开发者可以定义模板,将XML数据动态渲染成Word文档,实现自定义的格式化输出。 7. **Freemarker**:Freemarker是一个基于Java的模板引擎,常用于生成HTML、XML或其他格式的文本。它允许...

    java实现docx文档导出已有工具调查.zip

    5. **FreeMarker和velocity**:这两个模板引擎可以与Apache POI或其他库结合使用,通过模板来生成docx文档。这种方式适合大量重复性内容的生成,如批量生成个性化合同。 6. **export-word-main项目**:根据提供的...

Global site tag (gtag.js) - Google Analytics