Java使用Freemarker动态生成word文档
最近在工作中遇到动态生成word文档的需求,百度了一翻,在实践过程中遇到了各种问题,踩了很多坑,终于完成了项目需求,现在和大家分享一下开发过程中遇到的问题及解决办法!
开发过程如下:
- 新建Maven工程,pom.xml配置如下 ;
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.tan</groupId>
<artifactId>wordDemo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>wordDemo</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<junit.version>4.12</junit.version>
<freemarker.version>2.3.8</freemarker.version>
</properties>
<dependencies>
<!-- junnit start -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<!-- freemarker start -->
<dependency>
<groupId>freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>${freemarker.version}</version>
</dependency>
</dependencies>
</project>
- (1)首先用office新建一个需要生成的模本文件(注意一定使用微软的office新建,否则可能出现生成的word文档的兼容性问题)
(2)将word另存为(word 2003兼容版)xml兼容格式(不要直接修改文件后缀,需要另存为
(3)将xml文件后缀修改为ftl
(4)用java代码完成制作模板
电子发票实战应用
1.制作word文档模板:注意虽然直接在word文档中直接代码替换需要动态生成数据的地方,另存为xml文件之后,不一定正确,需要直接在代码中手动修改,但是模板中的图片位置一定需要插入一张图片!
2.项目路径如下:
3.生成word和将图片转换成二进制字符串
package com.tan.utils;
/**
* @Description : WordUtil.java
* @date :2019年9月20日 上午9:51:31
**/
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.Map;
import freemarker.template.Configuration;
import freemarker.template.Template;
import sun.misc.BASE64Encoder;
public class WordUtil {
private Configuration configure = null;
public Configuration getConfigure() {
return configure;
}
public void setConfigure(Configuration configure) {
this.configure = configure;
}
public WordUtil() {
configure = new Configuration();
configure.setDefaultEncoding("utf-8");
}
/**
*
* 根据word模板生成word文件
*
* @param dataMap : 数据
* @param inputFile : 输入模板文件地址
* @param outFilePath : 输出word文件地址
* @return
*
*
*
*/
public boolean createWord(Map<String, Object> dataMap, String inputFilePath, String outFilePath) {
boolean flag = false;
try {
// 指定路径方式(根据某个类的相对路径指定)
configure.setClassForTemplateLoading(this.getClass(), "/test");
// 以utf-8的编码读取ftl文件
Template template = configure.getTemplate(inputFilePath, "utf-8");
Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(outFilePath)), "utf-8"),
10240);
template.process(dataMap, out);
out.close();
flag = true;
} catch (Exception e) {
e.printStackTrace();
}
return flag;
}
/**
*
* 将图片转换成二进制字符串
*
* @param imgFilePath : 图片路径
* @return
*
*
*
*/
public String getImageStr(String imgFilePath) {
InputStream in = null;
byte[] data = null;
try {
in = new FileInputStream(imgFilePath);
data = new byte[in.available()];
in.read(data);
in.close();
} catch (Exception e) {
e.printStackTrace();
}
BASE64Encoder encoder = new BASE64Encoder();
return encoder.encode(data);
}
}
1.简单word生成
java代码如下:
public void testDemo1()
{
WordUtil wu = new WordUtil();
Map<String, Object> dataMap = new HashMap<String, Object>();
dataMap.put("username", "tyy");
dataMap.put("tel", "15206123658");
dataMap.put("address", "无锡市");
dataMap.put("date", new Date().toLocaleString());
dataMap.put("num", "123456789");
wu.createWord(dataMap, "demo.ftl", "D:/test.doc");
}
模版代码如下:
<w:tr wsp:rsidR="002E0598" wsp:rsidRPr="00AA752A" wsp:rsidTr="00AA752A">
<w:trPr>
<w:trHeight w:val="784"/>
</w:trPr>
<w:tc>
<w:tcPr>
<w:tcW w:w="8359" w:type="dxa"/>
<w:gridSpan w:val="3"/>
<w:shd w:val="clear" w:color="auto" w:fill="auto"/>
</w:tcPr>
<w:p wsp:rsidR="002E0598" wsp:rsidRPr="00AA752A" wsp:rsidRDefault="002E0598" wsp:rsidP="00AA752A">
<w:pPr>
<w:jc w:val="center"/>
<w:rPr>
<w:rFonts w:ascii="宋体" w:h-ansi="宋体"/>
<wx:font wx:val="宋体"/>
<w:b/>
<w:sz w:val="28"/>
<w:sz-cs w:val="28"/>
</w:rPr>
</w:pPr>
<w:r wsp:rsidRPr="00AA752A">
<w:rPr>
<w:rFonts w:ascii="宋体" w:h-ansi="宋体"/>
<wx:font wx:val="宋体"/>
<w:b/>
<w:sz w:val="28"/>
<w:sz-cs w:val="28"/>
</w:rPr>
<w:t>XX商城购物明细单</w:t>
</w:r>
</w:p>
</w:tc>
</w:tr>
<w:tr wsp:rsidR="002E0598" wsp:rsidRPr="00AA752A" wsp:rsidTr="00AA752A">
<w:trPr>
<w:trHeight w:val="392"/>
</w:trPr>
<w:tc>
<w:tcPr>
<w:tcW w:w="1557" w:type="dxa"/>
<w:shd w:val="clear" w:color="auto" w:fill="auto"/>
</w:tcPr>
<w:p wsp:rsidR="002E0598" wsp:rsidRPr="00AA752A" wsp:rsidRDefault="002E0598" wsp:rsidP="00AA752A">
<w:pPr>
<w:jc w:val="center"/>
<w:rPr>
<w:b/>
</w:rPr>
</w:pPr>
<w:r wsp:rsidRPr="00AA752A">
<w:rPr>
<wx:font wx:val="宋体"/>
<w:b/>
</w:rPr>
<w:t>收货人</w:t>
</w:r>
<w:r wsp:rsidRPr="00AA752A">
<w:rPr>
<w:rFonts w:hint="fareast"/>
<wx:font wx:val="宋体"/>
<w:b/>
</w:rPr>
<w:t>:</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="2596" w:type="dxa"/>
<w:shd w:val="clear" w:color="auto" w:fill="auto"/>
</w:tcPr>
<w:p wsp:rsidR="002E0598" wsp:rsidRPr="00AA752A" wsp:rsidRDefault="0066660D" wsp:rsidP="00AA752A">
<w:pPr>
<w:jc w:val="center"/>
</w:pPr>
<w:r wsp:rsidRPr="00AA752A">
<w:t>${username}</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="4206" w:type="dxa"/>
<w:vmerge w:val="restart"/>
<w:shd w:val="clear" w:color="auto" w:fill="auto"/>
</w:tcPr>
<w:p wsp:rsidR="002E0598" wsp:rsidRPr="00AA752A" wsp:rsidRDefault="00E417B3" wsp:rsidP="00E417B3">
<w:pPr>
<w:jc w:val="center"/>
</w:pPr>
<w:r>
<w:pict>
<v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f">
<v:stroke joinstyle="miter"/>
<v:formulas>
<v:f eqn="if lineDrawn pixelLineWidth 0"/>
<v:f eqn="sum @0 1 0"/>
<v:f eqn="sum 0 0 @1"/>
<v:f eqn="prod @2 1 2"/>
<v:f eqn="prod @3 21600 pixelWidth"/>
<v:f eqn="prod @3 21600 pixelHeight"/>
<v:f eqn="sum @0 0 1"/>
<v:f eqn="prod @6 1 2"/>
<v:f eqn="prod @7 21600 pixelWidth"/>
<v:f eqn="sum @8 21600 0"/>
<v:f eqn="prod @7 21600 pixelHeight"/>
<v:f eqn="sum @10 21600 0"/>
</v:formulas>
<v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
<o:lock v:ext="edit" aspectratio="t"/>
</v:shapetype>
<w:binData w:name="wordml://02000001.jpg" xml:space="preserve">
${img}
</w:binData> <v:shape id="_x0000_i1025" type="#_x0000_t75" style="width:414.6pt;height:233.4pt"> <v:imagedata src="wordml://02000001.jpg" o:title="1"/> </v:shape> </w:pict> </w:r> </w:p> </w:tc> </w:tr> <w:tr wsp:rsidR="002E0598" wsp:rsidRPr="00AA752A" wsp:rsidTr="00AA752A"> <w:trPr> <w:trHeight w:val="376"/> </w:trPr> <w:tc> <w:tcPr> <w:tcW w:w="1557" w:type="dxa"/> <w:shd w:val="clear" w:color="auto" w:fill="auto"/> </w:tcPr> <w:p wsp:rsidR="002E0598" wsp:rsidRPr="00AA752A" wsp:rsidRDefault="002E0598" wsp:rsidP="00AA752A"> <w:pPr> <w:jc w:val="center"/> <w:rPr> <w:b/> </w:rPr> </w:pPr> <w:r wsp:rsidRPr="00AA752A"> <w:rPr> <wx:font wx:val="宋体"/> <w:b/> </w:rPr> <w:t>联系电话</w:t>
</w:r>
<w:r wsp:rsidRPr="00AA752A">
<w:rPr>
<w:rFonts w:hint="fareast"/>
<wx:font wx:val="宋体"/>
<w:b/>
</w:rPr>
<w:t>:</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="2596" w:type="dxa"/>
<w:shd w:val="clear" w:color="auto" w:fill="auto"/>
</w:tcPr>
<w:p wsp:rsidR="002E0598" wsp:rsidRPr="00AA752A" wsp:rsidRDefault="0066660D" wsp:rsidP="00AA752A">
<w:pPr>
<w:jc w:val="center"/>
</w:pPr>
<w:r wsp:rsidRPr="00AA752A">
<w:rPr>
<w:rFonts w:hint="fareast"/>
</w:rPr>
<w:t>${tel}</w:t>
</w:r>
<w:r wsp:rsidRPr="00AA752A">
<w:t></w:t>
</w:r>
<w:proofErr w:type="spellStart"/>
<w:r wsp:rsidRPr="00AA752A">
<w:t></w:t>
</w:r>
<w:proofErr w:type="spellEnd"/>
<w:r wsp:rsidRPr="00AA752A">
<w:t></w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="4206" w:type="dxa"/>
<w:vmerge/>
<w:shd w:val="clear" w:color="auto" w:fill="auto"/>
</w:tcPr>
<w:p wsp:rsidR="002E0598" wsp:rsidRPr="00AA752A" wsp:rsidRDefault="002E0598" wsp:rsidP="00AA752A">
<w:pPr>
<w:jc w:val="center"/>
</w:pPr>
</w:p>
</w:tc>
</w:tr>
<w:tr wsp:rsidR="002E0598" wsp:rsidRPr="00AA752A" wsp:rsidTr="00AA752A">
<w:trPr>
<w:trHeight w:val="392"/>
</w:trPr>
<w:tc>
<w:tcPr>
<w:tcW w:w="1557" w:type="dxa"/>
<w:shd w:val="clear" w:color="auto" w:fill="auto"/>
</w:tcPr>
<w:p wsp:rsidR="002E0598" wsp:rsidRPr="00AA752A" wsp:rsidRDefault="002E0598" wsp:rsidP="00AA752A">
<w:pPr>
<w:jc w:val="center"/>
<w:rPr>
<w:b/>
</w:rPr>
</w:pPr>
<w:r wsp:rsidRPr="00AA752A">
<w:rPr>
<wx:font wx:val="宋体"/>
<w:b/>
</w:rPr>
<w:t>收货地址</w:t>
</w:r>
<w:r wsp:rsidRPr="00AA752A">
<w:rPr>
<w:rFonts w:hint="fareast"/>
<wx:font wx:val="宋体"/>
<w:b/>
</w:rPr>
<w:t>:</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="2596" w:type="dxa"/>
<w:shd w:val="clear" w:color="auto" w:fill="auto"/>
</w:tcPr>
<w:p wsp:rsidR="002E0598" wsp:rsidRPr="00AA752A" wsp:rsidRDefault="0066660D" wsp:rsidP="00AA752A">
<w:pPr>
<w:jc w:val="center"/>
</w:pPr>
<w:r wsp:rsidRPr="00AA752A">
<w:rPr>
<w:rFonts w:hint="fareast"/>
</w:rPr>
<w:t></w:t>
</w:r>
<w:r wsp:rsidRPr="00AA752A">
<w:t>${address}</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="4206" w:type="dxa"/>
<w:vmerge/>
<w:shd w:val="clear" w:color="auto" w:fill="auto"/>
</w:tcPr>
<w:p wsp:rsidR="002E0598" wsp:rsidRPr="00AA752A" wsp:rsidRDefault="002E0598" wsp:rsidP="00AA752A">
<w:pPr>
<w:jc w:val="center"/>
</w:pPr>
</w:p>
</w:tc>
</w:tr>
<w:tr wsp:rsidR="002E0598" wsp:rsidRPr="00AA752A" wsp:rsidTr="00AA752A">
<w:trPr>
<w:trHeight w:val="392"/>
</w:trPr>
<w:tc>
<w:tcPr>
<w:tcW w:w="1557" w:type="dxa"/>
<w:shd w:val="clear" w:color="auto" w:fill="auto"/>
</w:tcPr>
<w:p wsp:rsidR="002E0598" wsp:rsidRPr="00AA752A" wsp:rsidRDefault="002E0598" wsp:rsidP="00AA752A">
<w:pPr>
<w:jc w:val="center"/>
<w:rPr>
<w:b/>
</w:rPr>
</w:pPr>
<w:r wsp:rsidRPr="00AA752A">
<w:rPr>
<wx:font wx:val="宋体"/>
<w:b/>
</w:rPr>
<w:t>订购日期</w:t>
</w:r>
<w:r wsp:rsidRPr="00AA752A">
<w:rPr>
<w:rFonts w:hint="fareast"/>
<wx:font wx:val="宋体"/>
<w:b/>
</w:rPr>
<w:t>:</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="2596" w:type="dxa"/>
<w:shd w:val="clear" w:color="auto" w:fill="auto"/>
</w:tcPr>
<w:p wsp:rsidR="002E0598" wsp:rsidRPr="00AA752A" wsp:rsidRDefault="0066660D" wsp:rsidP="00AA752A">
<w:pPr>
<w:jc w:val="center"/>
</w:pPr>
<w:r wsp:rsidRPr="00AA752A">
<w:rPr>
<w:rFonts w:hint="fareast"/>
</w:rPr>
<w:t></w:t>
</w:r>
<w:r wsp:rsidRPr="00AA752A">
<w:t>${date}</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="4206" w:type="dxa"/>
<w:vmerge/>
<w:shd w:val="clear" w:color="auto" w:fill="auto"/>
</w:tcPr>
<w:p wsp:rsidR="002E0598" wsp:rsidRPr="00AA752A" wsp:rsidRDefault="002E0598" wsp:rsidP="00AA752A">
<w:pPr>
<w:jc w:val="center"/>
</w:pPr>
</w:p>
</w:tc>
</w:tr>
<w:tr wsp:rsidR="002E0598" wsp:rsidRPr="00AA752A" wsp:rsidTr="00AA752A">
<w:trPr>
<w:trHeight w:val="392"/>
</w:trPr>
<w:tc>
<w:tcPr>
<w:tcW w:w="1557" w:type="dxa"/>
<w:shd w:val="clear" w:color="auto" w:fill="auto"/>
</w:tcPr>
<w:p wsp:rsidR="002E0598" wsp:rsidRPr="00AA752A" wsp:rsidRDefault="002E0598" wsp:rsidP="00AA752A">
<w:pPr>
<w:jc w:val="center"/>
<w:rPr>
<w:b/>
</w:rPr>
</w:pPr>
<w:r wsp:rsidRPr="00AA752A">
<w:rPr>
<wx:font wx:val="宋体"/>
<w:b/>
</w:rPr>
<w:t>订单号</w:t>
</w:r>
<w:r wsp:rsidRPr="00AA752A">
<w:rPr>
<w:rFonts w:hint="fareast"/>
<wx:font wx:val="宋体"/>
<w:b/>
</w:rPr>
<w:t>:</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="2596" w:type="dxa"/>
<w:shd w:val="clear" w:color="auto" w:fill="auto"/>
</w:tcPr>
<w:p wsp:rsidR="002E0598" wsp:rsidRPr="00AA752A" wsp:rsidRDefault="0066660D" wsp:rsidP="00AA752A">
<w:pPr>
<w:jc w:val="center"/>
</w:pPr>
<w:r wsp:rsidRPr="00AA752A">
<w:rPr>
<w:rFonts w:hint="fareast"/>
</w:rPr>
<w:t></w:t>
</w:r>
<w:r wsp:rsidRPr="00AA752A">
<w:t></w:t>
</w:r>
<w:proofErr w:type="spellStart"/>
<w:r wsp:rsidRPr="00AA752A">
<w:t>${num}</w:t>
</w:r>
<w:proofErr w:type="spellEnd"/>
<w:r wsp:rsidRPr="00AA752A">
<w:t></w:t>
</w:r>
</w:p>
</w:tc>
2.生成word文件中导入图片
java代码如下:图片路径和ftl模板路径一致
public void testDemo2()
{
WordUtil wu = new WordUtil();
Map<String, Object> dataMap = new HashMap<String, Object>();
dataMap.put("username", "tyy");
dataMap.put("tel", "15206123658");
dataMap.put("address", "无锡市");
dataMap.put("date", new Date().toLocaleString());
dataMap.put("num", "123456789");
//导入图片
String imgPath = this.getClass().getResource("/test/1.jpg").getPath();
String outPathImg = wu.getImageStr(imgPath);
dataMap.put("img", outPathImg);
wu.createWord(dataMap, "demo.ftl", "D:/test.doc");
}
模板代码如下:
<w:binData w:name="wordml://02000001.jpg" xml:space="preserve">
${img}
</w:binData>
3.生成循环的表格
list实体类代码如下:注意属性首字母一定要小写,不要大写!
package com.tan.bean;
/**
* @Description : Page.java
**/
public class Page {
private String a;
private String b;
private double c;
private double d;
private double e;
private String f;
public String getA() {
return a;
}
public void setA(String a) {
this.a = a;
}
public String getB() {
return b;
}
public void setB(String b) {
this.b = b;
}
public double getC() {
return c;
}
public void setC(double c) {
this.c = c;
}
public double getD() {
return d;
}
public void setD(double d) {
this.d = d;
}
public double getE() {
return e;
}
public void setE(double e) {
this.e = e;
}
public String getF() {
return f;
}
public void setF(String f) {
this.f = f;
}
}
java代码如下:
public void testDemo3()
{
WordUtil wu = new WordUtil();
Map<String, Object> dataMap = new HashMap<String, Object>();
dataMap.put("username", "tyy");
dataMap.put("tel", "15206123658");
dataMap.put("address", "无锡市");
dataMap.put("date", new Date().toLocaleString());
dataMap.put("num", "123456789");
//导入图片
String imgPath = this.getClass().getResource("/test/1.jpg").getPath();
String outPathImg = wu.getImageStr(imgPath);
dataMap.put("img", outPathImg);
//生成循环的表格
List<Page> list = new ArrayList<Page>();
Page p = new Page();
p.setA("1023");
p.setB("华为P30");
p.setC(1);
p.setD(4288);
p.setE(p.getC()*p.getD());
p.setF("无");
list.add(p);
Page p2 = new Page();
p2.setA("1050");
p2.setB("华为Watch");
p2.setC(2);
p2.setD(5000);
p2.setE(p2.getC()*p2.getD());
p2.setF("无");
list.add(p2);
double allprice = 0;
for(int i = 0; i < list.size(); i++) {
allprice += list.get(i).getE();
}
//小计
dataMap.put("allprice", allprice);
//折扣
dataMap.put("discount", "%5");
//折扣金额
double discountprice = allprice * 0.05;
dataMap.put("discountprice", discountprice);
//总计
double all = allprice - discountprice;
dataMap.put("all", all);
dataMap.put("list", list);
wu.createWord(dataMap, "demo.ftl", "D:/test.doc");
}
模板代码如下:
<#list list as li>
<w:tr wsp:rsidR="00E417B3" wsp:rsidRPr="00AA752A" wsp:rsidTr="00AA752A">
<w:tc>
<w:tcPr>
<w:tcW w:w="1383" w:type="dxa"/>
<w:shd w:val="clear" w:color="auto" w:fill="auto"/>
</w:tcPr>
<w:p wsp:rsidR="00EA7EAC" wsp:rsidRPr="00AA752A" wsp:rsidRDefault="00EA7EAC">
<w:pPr>
<w:rPr>
<w:b/>
</w:rPr>
</w:pPr>
<w:r wsp:rsidRPr="00AA752A">
<w:rPr>
<w:rFonts w:hint="fareast"/>
<wx:font wx:val="宋体"/>
<w:b/>
</w:rPr>
<w:t>${li.a}</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="1383" w:type="dxa"/>
<w:shd w:val="clear" w:color="auto" w:fill="auto"/>
</w:tcPr>
<w:p wsp:rsidR="00EA7EAC" wsp:rsidRPr="00AA752A" wsp:rsidRDefault="00EA7EAC">
<w:pPr>
<w:rPr>
<w:b/>
</w:rPr>
</w:pPr>
<w:r wsp:rsidRPr="00AA752A">
<w:rPr>
<w:rFonts w:hint="fareast"/>
<wx:font wx:val="宋体"/>
<w:b/>
</w:rPr>
<w:t>${li.b}</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="1382" w:type="dxa"/>
<w:shd w:val="clear" w:color="auto" w:fill="auto"/>
</w:tcPr>
<w:p wsp:rsidR="00EA7EAC" wsp:rsidRPr="00AA752A" wsp:rsidRDefault="00EA7EAC">
<w:pPr>
<w:rPr>
<w:b/>
</w:rPr>
</w:pPr>
<w:r wsp:rsidRPr="00AA752A">
<w:rPr>
<w:rFonts w:hint="fareast"/>
<wx:font wx:val="宋体"/>
<w:b/>
</w:rPr>
<w:t>${li.c}</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="1382" w:type="dxa"/>
<w:shd w:val="clear" w:color="auto" w:fill="auto"/>
</w:tcPr>
<w:p wsp:rsidR="00EA7EAC" wsp:rsidRPr="00AA752A" wsp:rsidRDefault="00EA7EAC">
<w:pPr>
<w:rPr>
<w:b/>
</w:rPr>
</w:pPr>
<w:r wsp:rsidRPr="00AA752A">
<w:rPr>
<w:rFonts w:hint="fareast"/>
<wx:font wx:val="宋体"/>
<w:b/>
</w:rPr>
<w:t>${li.d}</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="1383" w:type="dxa"/>
<w:shd w:val="clear" w:color="auto" w:fill="auto"/>
</w:tcPr>
<w:p wsp:rsidR="00EA7EAC" wsp:rsidRPr="00AA752A" wsp:rsidRDefault="00EA7EAC">
<w:pPr>
<w:rPr>
<w:b/>
</w:rPr>
</w:pPr>
<w:r wsp:rsidRPr="00AA752A">
<w:rPr>
<w:rFonts w:hint="fareast"/>
<wx:font wx:val="宋体"/>
<w:b/>
</w:rPr>
<w:t>${li.e}</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="1383" w:type="dxa"/>
<w:shd w:val="clear" w:color="auto" w:fill="auto"/>
</w:tcPr>
<w:p wsp:rsidR="00EA7EAC" wsp:rsidRPr="00AA752A" wsp:rsidRDefault="00EA7EAC">
<w:pPr>
<w:rPr>
<w:b/>
</w:rPr>
</w:pPr>
<w:r wsp:rsidRPr="00AA752A">
<w:rPr>
<w:rFonts w:hint="fareast"/>
<wx:font wx:val="宋体"/>
<w:b/>
</w:rPr>
<w:t>${li.f}</w:t>
</w:r>
</w:p>
</w:tc>
</w:tr>
</#list>