1、先将word模板打开,将变量用 ${...} 替换,如图:(图中变量分别为 name,二维码图片 和 url )
【图片是base64码,可以将文件先导出成xml文件之后再将模板中的base64码替换成变量${qrCode}】
2、将word模板另存为*.xml格式的文件,检查一下xml文件中是否有 变量${name},${url},(有时会出现字符错乱没在一起的现象,需要调整一下),检查了变量是完整的之后,将文件名后缀改一下 改成 *.ftl 格式,这样word模板就生成了
3、可以在前台发送get请求
function downqrcode(){
var name = $("#desc_name").html();
var the_text= $("#the_text").html();
window.location.href =getServerUrl() + "/admin/UploadImgServlet?url="+the_text+"&name="+name;
}
4、依赖:
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.27-incubating</version>
</dependency>
5、java代码:
package servlets;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import utils.QrcodeUtils;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.HashMap;
import java.util.Map;
@WebServlet("/admin/UploadImgServlet")
public class UploadImgServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String url = request.getParameter("url");
String name = request.getParameter("name");
String qrCode = QrcodeUtils.createBase64QrocodePath(url,"png",15,null);
Map<String,Object> dataMap=new HashMap<String,Object>();
dataMap.put("name", name);
dataMap.put("url", url);
dataMap.put("qrCode", qrCode);
Configuration configuration = new Configuration();
configuration.setDefaultEncoding("UTF-8");
configuration.setClassForTemplateLoading(this.getClass(),"../"); //FTL文件所存在的位置
Template t=null;
try {
t = configuration.getTemplate("businessInfo.ftl"); //文件名
} catch (IOException e) {
e.printStackTrace();
}
response.setContentType("application/octet-stream");
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Disposition","attachment;filename=BusinessInfo.doc");
Writer out = response.getWriter();
try {
t.process(dataMap, out);
} catch (TemplateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
class路径展示: