java生成word模板详解

本文详细介绍了如何使用Freemarker框架将模板文件(.doc与.ftl)转换为Word文档的过程,包括导入依赖、创建模板、填充数据等步骤,并提供了模板文件的XML格式化软件使用说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在做j2ee系统的时候,经常会遇到按照模板生成word文件,那么,我下面将详细的方法记录下来,以便于大家查看

  • 首先,我们要想将包导入我们的项目
freemarker.jar
  • 对于一个模板我们需要两个很重要的文件(.doc文件与.ftl文件)

.doc文件就是我们模板的一个样例文件

.ftl文件生成方法是这样:将.doc文件里面想要被自动填入的位置写上相对应的字段名称(也就是key)然后将这个.doc文件另存为.xml文件,之后对这个字段进行处理,处理方法是用${}把这个字段名包裹起来比如说${xm!},这里就会把你传过来的key为xm的值放到里面(后面的!是判断是后传过来的为空,如果是空就放空字符串)例子如下

          <w:p w:rsidR="00CA42DD" w:rsidRPr="008E29E5" w:rsidRDefault="00500E61" w:rsidP="00DB4832">
            <w:pPr>
              <w:spacing w:line="360" w:lineRule="auto" />
              <w:rPr>
                <w:rFonts w:ascii="仿宋_GB2312" w:eastAsia="仿宋_GB2312" w:hAnsi="宋体" />
                <w:sz w:val="28" />
              </w:rPr>
            </w:pPr>
            <w:r w:rsidRPr="00500E61">
              <w:rPr>
                <w:rFonts w:ascii="仿宋_GB2312" w:eastAsia="仿宋_GB2312" w:hAnsi="宋体" />
                <w:color w:val="FF0000" />
                <w:sz w:val="28" />
              </w:rPr>
              <w:t>${organization!}</w:t>
            </w:r>
            <w:r w:rsidR="00CA42DD" w:rsidRPr="008E29E5">
              <w:rPr>
                <w:rFonts w:ascii="仿宋_GB2312" w:eastAsia="仿宋_GB2312" w:hAnsi="宋体" w:hint="eastAsia" />
                <w:sz w:val="28" />
              </w:rPr>
              <w:t>:</w:t>
            </w:r>
          </w:p>
<!--列表数据-->
<#list ryList as ry>
${ry.xm!}
</#list> 

最后将这个.xml文件的后缀名改成.ftl即可

  • 然后我们调用freemarker的方法实现填充模板信息,下面我将我我们的实现方法给大家展示出来,大家根据自己的需求可进行相对应的更改

 

public void outputFile(ServletContext servletContext ,String templateFileDirectoryPath,String templateFileName,String outputFilePath,HashMap<String, Object> templateDatas){
		Configuration configuration = new Configuration();
		configuration.setDefaultEncoding("UTF-8");
		configuration.setServletContextForTemplateLoading(servletContext, templateFileDirectoryPath);
		try {
			Template template = configuration.getTemplate(templateFileName);
			template.setEncoding("UTF-8");
			File outFlie = new File(outputFilePath);
			try {
				FileOutputStream fileOutputStream = new FileOutputStream(outFlie);
				OutputStreamWriter outputStream;
				try {
					outputStream = new OutputStreamWriter(fileOutputStream, "UTF-8");
					Writer out = new BufferedWriter(outputStream);
					try {
						template.process(templateDatas, out);
					} catch (TemplateException e) {
						e.getMessage();
						log.error("模板数据绑定异常!");
					}
					out.flush();
				} catch (UnsupportedEncodingException e) {
					log.error("未找到指定编码格式");
				}
				
			} catch (FileNotFoundException e) {
				e.getMessage();
				log.error("未找到输出文件:"+outputFilePath);
			}
			
		} catch (IOException e) {
			e.getMessage();
			log.error("模板文件:"+templateFileDirectoryPath+templateFileName+"读取异常!");			
		}			
	}

 下面我对这五个参数获取方式进行一下解释:

1.servletContext:request.getSession().getServletContext();

2.templateFileDirectoryPath:存放模板的路径(一般情况下,.doc与.ftl存在同一个路径里面,这样比较方便找到,如:[res/files/foreignaffairs/goabroad/template/freemarker/])

3.templateFileName:模板文件名称(即.ftl的文件名称)

4.outputFilePath:新生成文件的路径

5.templateDatas:数据:通常情况下是Map<String,Object>类型

这样就大功告成了,炒鸡简单,附件中会给大家一个xml格式化软件,用起来就方便极了!!    :)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值