使用freemarker转word简单教程

本教程介绍了如何使用Freemarker将模板转换为Word文档。事前准备包括解决IDE中约束未注册的问题,下载Freemarker jar包,以及熟悉Freemarker语法。通过编辑Word模板,插入变量,并将模板转换为XML格式进行处理。代码实现部分提供了工具类WordUtil的使用示例,用于生成和下载Word文档。
摘要由CSDN通过智能技术生成

事前准备

由于ftl 文件可能在idea 中报 约束未注册的问题 URI is not registered 请参考下面的博客
链接: idea中xml或者ftl文件xmlns约束报红解决方案.
由于ftl 文件可能在eclipse中缺少freemarker 编译器导致失败的问题 要安装 freemarker ide 请参考下面的博客
链接: eclipse中离线安装 freemarker IDE 插件和jad反编译插件.
编辑ftl文件时常用的freemarker语法 请参考下面的博客
链接: freemarker ftl文件简单语法整理.

下载jar包

freemarker-2.3.30.jar
博客这两天上传附件老是失败,就不放在博客里了,有需要可以给我留言,或者自行搜索下载

编辑一个word模板

如图所示,一些要传参的地方可以提前使用freemarker的ftl语法,加入变量
在这里插入图片描述

模板处理

将编辑好的word转存为xml 格式,使用notepad++ 或者 ue打开
这是代码都是一行的比较乱,使用idea中 Ctrl+Alt+L 进行格式化,
或者 notepad++中的 插件 -> XML Tools-> pretty print(XML only with line breaks),或者直接快捷键 Ctrl alt shift B,进行格式化
编译之后每一行的标签是<w:tr>
同时注意对于列表中
要使用
表格循环用标签
<#list userList as user>
<w:tr>
姓名: u s e r . u s e r N a m e , 性 别 : {user.userName} , 性别: user.userName{user.sex}
</w:tr>
</#list>
在这里插入图片描述
在这里插入图片描述
再就是如果有图片会看到图片占位的地方,有一片base64编码后的代码,把base64替换成${image}

	<pkg:part pkg:name="/word/media/image1.jpg" pkg:contentType="image/jpeg" pkg:compression="store">
		<pkg:binaryData>${imagej}</pkg:binaryData>
	</pkg:part>
	<pkg:part pkg:name="/word/media/image2.PNG" pkg:contentType="image/png" pkg:compression="store">
		<pkg:binaryData>${imagep}</pkg:binaryData>
	</pkg:part>

在此过程中可以将创建人,文件生成时间等一些属性删去也是没有问题的
最后,更改文件后缀为 。.ftl

代码实现

工具处理类

WordUtil

package com.yucheng.cmis.util;

import java.io.BufferedWriter;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.StringWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Map;

import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;

import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import freemarker.template.TemplateExceptionHandler;
import freemarker.template.Version;
import sun.misc.BASE64Encoder;

public class WordUtil {
   

    // FreeMarker 配置
    private static Configuration cfg;
    //默认的给定公共文件路径
    private static String basePath = System.getProperty("user.dir")+"/WebContent/WEB-INF/template";

    /**
     * @author JL-J 静态内部类,创建freeMarker 配置,实例化工具类
     */
    private static class LazyHolder {
   

        // 创建 freeMarker 配置 ,2.3.30  引入的freemarker 版本号
        private static final Configuration config = new Configuration(new Version("2.3.30"));

        // 实例化工具类
        private static final WordUtil wu = new WordUtil();
    }

    /**
     * 私有构造函数
     */
    
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值