首先用office建一个word文档
参数写自己查询出来的字段,我在这里房里图片是方便找到位置替换为64位编码
模板创建好之后,另存为Word 2003 XML文档(*.xml) 存储为别的可能会报错,我只用这一种
存储为xml之后千万不要用word打开,最好用notpad++打开,复制里面的数据到格式化xml工具在线格式化工具格式化一下(注:该工具有弊端,会把定义的参数打散,需要自己手动修改一下)
比如这里我定义的是${about},他给分开,只需要删除多余的<w:r>标签即可
修改后
图片导出的只需要把我的那些数据复制替换一下就可以了,记住自己逻辑里面写的集合名称就ok了,
详情点击下面的标题
templates
找到我的<#list>判断
1175-1232行
里面的参数都是和逻辑处理那边对应的
导出后截图
spring:
profiles:
active: dev
servlet:
multipart:
max-file-size: 102400MB
max-request-size: 102400MB
mybatis-plus:
configuration:
# 不打印sql
# log-impl: org.apache.ibatis.logging.nologging.NoLoggingImpl
# 打印sql
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
# map集合值为null时也返回
call-setters-on-nulls: true
multipart:
enabled: true
max-file-size: 100MB
max-request-size: 100MB
spring:
datasource:
url: jdbc:postgresql://localhost:5432/word
username: postgres
password:
driver-class-name: org.postgresql.Driver
server:
port: 8799
servlet:
context-path: /ftl
uploadFilePath: E:\apache-tomcat-9.0.41\apache-tomcat-9.0.41\webapps\rfwg_files
<?xml version="1.0" encoding="UTF-8"?>
<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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.lxl</groupId>
<artifactId>mybatisplus</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>mybatisplus</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.1.tmp</version>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.28</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.58</version>
</dependency>
<!--io流转换-->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
<!--添加本地的jacob.jar包 -->
<dependency>
<groupId>jacob</groupId>
<artifactId>jacob</artifactId>
<version>1.19</version>
</dependency>
<!--word转pdf-->
<dependency>
<groupId>e-iceblue</groupId>
<artifactId>spire.doc.free</artifactId>
<version>3.9.0</version>
</dependency>
<!--io流转换-->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
</dependencies>
<build>
<finalName>manage-application</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>*</include>
<include>*/*</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>rc/main/resources</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.ftl</include>
</includes>
</resource>
</resources>
</build>
</project>
这里我先把工具类放在上面是为了防止下面类里面数据会被错
package com.cao.ftlword.utils;
import java.io.Serializable;
/**
* 消息对象
*/
public class AjaxObj implements Serializable {
private static final long serialVersionUID = 4806448810229890854L;
private int code;
private String msg;
private String token;
private Object data;
private Boolean flag;
public AjaxObj() {
}
public Boolean getFlag() {
return flag;
}
public void setFlag(Boolean flag) {
this.flag = flag;
}
public AjaxObj(int code, String msg) {
this.code = code;
this.msg = msg;
}
public AjaxObj(int code, String msg, Object data) {
this.code = code;
this.msg = msg;
this.data = data;
}
public AjaxObj(int code, String msg, Object data, Boolean flag) {
this.code = code;
this.msg = msg;
this.data = data;
this.flag = flag;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
}
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.util.DigestUtils;
import org.springframework.util.ObjectUtils;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.*;
public class CommUtils {
/**
* 判断一个对象(包括String、以及Collection下的各个子类集合) 是否为空, 为空则返回true, 否则会返回false
*/
@SuppressWarnings("rawtypes")
public static boolean isEmpty(Object obj) {
if (obj == null)
return true;
if (obj instanceof String) {
if (((String) obj).equals(""))
return true;
}
if (obj instanceof Collection<?>) {
if (((Collection) obj).size() <= 0)
return true;
}
if (obj instanceof String[]) {
if (((String[]) obj).length <= 0) {
return true;
}
}
if (obj instanceof Object[]) {
if (((Object[]) obj).length <= 0) {
return true;
}
}
return false;
}
/**
* 生成uuid
*
* @return
*/
public static String getUUID() {
return UUID.randomUUID().toString().replace("-", "");
}
/**
* 将指定日期按照指定的格式以字符串的形式进行返回
*/
public static String getDate(String pattern, Date date) {
SimpleDateFormat format = new SimpleDateFormat(pattern);
return format.format(date);
}
/**
* 将当前日期按照 "年-月-日 时:分:秒" 的日期格式以字符串的形式返回
*/
public static String getDate() {
return getDate("yyyy-MM-dd HH:mm:ss", new Date());
}
public static String getMD5(String str) {
return DigestUtils.md5DigestAsHex(str.getBytes());
}
/**
* 下载文件
*/
public static void downloadFile(String path, HttpServletResponse response) {
File file = new File(path);
byte[] buffer = new byte[(int) file.length()];
FileInputStream fis = null; //文件输入流
BufferedInputStream bis = null;
OutputStream os = null; //输出流
try {
os = response.getOutputStream();
fis = new FileInputStream(file);
bis = new BufferedInputStream(fis);
int i = bis.read(buffer);
while (i != -1) {
os.write(buffer);
i = bis.read(buffer);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("----------file download----------" + path);
try {
bis.close();
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//递归删文件
public static boolean delAllFile(File file) {
if (!file.exists()) {
return false;
}
if (file.isDirectory()) {
File[] files = file.listFiles();
if (files != null) {
for (File f : files) {
delAllFile(f);
}
}
}
return file.delete();
}
public static void delDiskFile(String filePath) {
//删除磁盘上的附件文件
try {
File file = new File(filePath);
if (file.exists()) {
CommUtils.delAllFile(new File(filePath));
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static File multipartFileToFile(MultipartFile multipartFile) {
try {
// 获取文件名
String fileName = multipartFile.getOriginalFilename();
// 获取文件后缀
String prefix = fileName.substring(fileName.lastIndexOf("."));
// 用uuid作为文件名,防止生成的临时文件重复
File tempFile = File.createTempFile(CommUtils.getUUID(), prefix);
multipartFile.transferTo(tempFile);
return tempFile;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
// 逆向递归删除空目录
public void delEmptyPath(String path) {
File file = new File(path);
if (file.exists() && file.isDirectory()) {
File[] files = file.listFiles();
if (files != null && files.length > 0)
return;
if (file.delete()) {
delEmptyPath(file.getParent());
}
}
}
//拷贝到临时文件夹
public static void copyDir(String sourcePath, String newPath) throws IOException {
File file = new File(sourcePath);
String[] filePath = file.list();
if (!(new File(newPath)).exists()) {
(new File(newPath)).mkdir();
} else {
delAllFile(new File(newPath));
(new File(newPath)).mkdir();
}
if (filePath != null) {
for (int i = 0; i < filePath.length; i++) {
if ((new File(sourcePath + file.separator + filePath[i])).isDirectory()) {
copyDir(sourcePath + file.separator + filePath[i], newPath + file.separator + filePath[i]);
}
if (new File(sourcePath + file.separator + filePath[i]).isFile() && !new File(sourcePath + file.separator + filePath[i]).getName().contains("ys_")) {
copyFile(sourcePath + file.separator + filePath[i], newPath + file.separator + filePath[i]);
}
}
}
}
public static void copyFile(String oldPath, String newPath) throws IOException {
File oldFile = new File(oldPath);
File file = new File(newPath);
FileInputStream in = new FileInputStream(oldFile);
FileOutputStream out = new FileOutputStream(file);
byte[] buffer = new byte[2097152];
while ((in.read(buffer)) != -1) {
out.write(buffer);
}
out.close();
in.close();
}
public static File getTemplateFile(String templatePath) throws Exception {
File file = File.createTempFile("temp", null);
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
Resource[] resources = resolver.getResources(templatePath);
if (resources.length == 1) {
InputStream inputStream = resources[0].getInputStream();
inputStreamToFile(inputStream, file);
} else {
System.out.println("请检查模板文件是否存在");
}
return file;
}
public static void inputStreamToFile(InputStream ins, File file) {
try {
OutputStream os = new FileOutputStream(file);
int bytesRead = 0;
byte[] buffer = new byte[8192];
while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
os.write(buffer, 0, bytesRead);
}
os.close();
ins.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static File searchFile(File dir) {
File[] subFiles = dir.listFiles(); //获取e盘下所有的文件或文件夹对象
File resFile = dir;
if (null != subFiles) {
for (File subFile : subFiles) {
if (subFile.isDirectory()) { //文件夹则递归寻找,后缀为jpg文件则输出名字
resFile = searchFile(subFile);
} else if (subFile.isFile() && subFile.getName().endsWith(".shp")) {
resFile = subFile;
break;
}
}
}
return resFile;
}
/**
* byte数组转换成16进制字符串
*/
public static String bytesToHexString(byte[] src) {
StringBuilder stringBuilder = new StringBuilder();
if (src == null || src.length <= 0) {
return null;
}
for (int i = 0; i < src.length; i++) {
int v = src[i] & 0xFF;
String hv = Integer.toHexString(v);
if (hv.length() < 2) {
stringBuilder.append(0);
}
stringBuilder.append(hv);
}
return stringBuilder.toString();
}
/**
* 根据文件流判断图片类型
*/
public static String getPicType(FileInputStream fis) {
//读取文件的前几个字节来判断图片格式
byte[] b = new byte[4];
try {
fis.read(b, 0, b.length);
String type = bytesToHexString(b).toUpperCase();
if (type.contains("FFD8FF")) {
return "jpg";
} else if (type.contains("89504E47")) {
return "png";
} else if (type.contains("47494638")) {
return "gif";
} else if (type.contains("424D")) {
return "bmp";
} else {
return "unknown";
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return null;
}
public static boolean isPicBySuffix(String suffix) {
if (".JPG".equals(suffix.toUpperCase()) || ".PNG".equals(suffix.toUpperCase())
|| ".JPEG".equals(suffix.toUpperCase()) || ".GIF".equals(suffix.toUpperCase())
|| ".BMP".equals(suffix.toUpperCase())) {
return true;
}
return false;
}
public static boolean isWordBySuffix(String suffix) {
if (".DOC".equals(suffix.toUpperCase()) || ".DOCX".equals(suffix.toUpperCase())) {
return true;
}
return false;
}
public static boolean isDxfBySuffix(String suffix) {
if (".DXF".equals(suffix.toUpperCase())) {
return true;
}
return false;
}
public static boolean isZipBySuffix(String suffix) {
if (".ZIP".equals(suffix.toUpperCase())) {
return true;
}
return false;
}
public static boolean isExcelBySuffix(String suffix) {
if (".XLS".equals(suffix.toUpperCase()) || ".XLSX".equals(suffix.toUpperCase())) {
return true;
}
return false;
}
public static JSONObject xAxisSeries(List<Object> xAxisDataList, List<Object> seriesDataList) {
JSONObject jsonObject = new JSONObject();
JSONObject xAxisData = new JSONObject();
xAxisData.put("data", xAxisDataList);
jsonObject.put("xAxis", xAxisData);
JSONObject dd = new JSONObject();
dd.put("data", seriesDataList);
JSONArray jsonArray = new JSONArray();
jsonArray.add(dd);
jsonObject.put("series", jsonArray);
return jsonObject;
}
public static JSONObject legendSeries(List<Object> legendDataList, List<Object> seriesDataList) {
JSONObject jsonObject = new JSONObject();
JSONObject legendData = new JSONObject();
legendData.put("data", legendDataList);
jsonObject.put("legend", legendData);
JSONObject dd = new JSONObject();
JSONArray ja = new JSONArray();
for (int i = 0; i < seriesDataList.size(); i++) {
JSONObject jo = new JSONObject();
jo.put("name", legendDataList.get(i));
jo.put("value", seriesDataList.get(i));
ja.add(jo);
}
dd.put("data", ja);
JSONArray jsonArray = new JSONArray();
jsonArray.add(dd);
jsonObject.put("series", jsonArray);
return jsonObject;
}
public static void getSignPIdAndIndex(JSONArray jsonArray, String suuid, Map<String, Integer> map) {
for (int i = 0; i < jsonArray.size(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
JSONArray children = jsonObject.getJSONArray("children");
if (!ObjectUtils.isEmpty(children) && children.size() > 0) {
getSignPIdAndIndex(children, suuid, map);
} else {
if (suuid.equals(jsonObject.getString("id"))) {
map.put(jsonObject.getString("parentTId"), i);
}
}
}
}
public static String getIpAddress(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_CLIENT_IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_X_FORWARDED_FOR");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}
public static String toUTF8(String str) {
if (isEmpty(str)) {
return "";
}
try {
if (str.equals(new String(str.getBytes("GB2312"), "GB2312"))) {
str = new String(str.getBytes("GB2312"), "utf-8");
return str;
}
} catch (Exception exception) {
}
try {
if (str.equals(new String(str.getBytes("ISO-8859-1"), "ISO-8859-1"))) {
str = new String(str.getBytes("ISO-8859-1"), "utf-8");
return str;
}
} catch (Exception exception1) {
}
try {
if (str.equals(new String(str.getBytes("GBK"), "GBK"))) {
str = new String(str.getBytes("GBK"), "utf-8");
return str;
}
} catch (Exception exception3) {
}
return str;
}
// 文件和视频
public static boolean suffixName(String suffixName) {
if ((".txt").equalsIgnoreCase(suffixName) || (".dwg").equalsIgnoreCase(suffixName)
|| (".jpg").equalsIgnoreCase(suffixName) || (".jpeg").equalsIgnoreCase(suffixName) || (".png").equalsIgnoreCase(suffixName)
|| (".bmp").equalsIgnoreCase(suffixName) || (".gif").equalsIgnoreCase(suffixName)
|| (".mp4").equalsIgnoreCase(suffixName) || (".avi").equalsIgnoreCase(suffixName)
|| (".3gp").equalsIgnoreCase(suffixName) || (".flv").equalsIgnoreCase(suffixName)
|| (".rar").equalsIgnoreCase(suffixName) || (".zip").equalsIgnoreCase(suffixName)
|| (".doc").equalsIgnoreCase(suffixName) || (".docx").equalsIgnoreCase(suffixName)
|| (".xlsx").equalsIgnoreCase(suffixName) || (".xls").equalsIgnoreCase(suffixName) || (".pdf").equalsIgnoreCase(suffixName)
|| (".ppt").equalsIgnoreCase(suffixName) || (".pps").equalsIgnoreCase(suffixName) || (".pptx").equalsIgnoreCase(suffixName)) {
return true;
} else {
return false;
}
}
// 图片
public static boolean suffixNameImage(String suffixName) {
if ((".tiff").equalsIgnoreCase(suffixName) || (".pjp").equalsIgnoreCase(suffixName)
|| (".jfif").equalsIgnoreCase(suffixName) || (".gif").equalsIgnoreCase(suffixName) || (".svg").equalsIgnoreCase(suffixName)
|| (".bmp").equalsIgnoreCase(suffixName) || (".png").equalsIgnoreCase(suffixName)
|| (".jpeg").equalsIgnoreCase(suffixName) || (".svgz").equalsIgnoreCase(suffixName)
|| (".jpg").equalsIgnoreCase(suffixName) || (".webp").equalsIgnoreCase(suffixName)
|| (".ico").equalsIgnoreCase(suffixName) || (".xbm").equalsIgnoreCase(suffixName)
|| (".dib").equalsIgnoreCase(suffixName) || (".tif").equalsIgnoreCase(suffixName)
|| (".pjpeg").equalsIgnoreCase(suffixName) || (".avif").equalsIgnoreCase(suffixName)) {
return true;
} else {
return false;
}
}
// 文件不包含视频
public static boolean suffixNameFile(String suffixName) {
if ((".txt").equalsIgnoreCase(suffixName) || (".dwg").equalsIgnoreCase(suffixName)
|| (".jpg").equalsIgnoreCase(suffixName) || (".jpeg").equalsIgnoreCase(suffixName) || (".png").equalsIgnoreCase(suffixName)
|| (".bmp").equalsIgnoreCase(suffixName) || (".gif").equalsIgnoreCase(suffixName)
|| (".rar").equalsIgnoreCase(suffixName) || (".zip").equalsIgnoreCase(suffixName)
|| (".doc").equalsIgnoreCase(suffixName) || (".docx").equalsIgnoreCase(suffixName)
|| (".xlsx").equalsIgnoreCase(suffixName) || (".xls").equalsIgnoreCase(suffixName) || (".pdf").equalsIgnoreCase(suffixName)
|| (".ppt").equalsIgnoreCase(suffixName) || (".pps").equalsIgnoreCase(suffixName) || (".pptx").equalsIgnoreCase(suffixName)) {
return true;
} else {
return false;
}
}
// 文件不包含视频
public static boolean suffixNameExcel(String suffixName) {
if ((".xlsx").equalsIgnoreCase(suffixName) || (".xls").equalsIgnoreCase(suffixName) || (".pdf").equalsIgnoreCase(suffixName)) {
return true;
} else {
return false;
}
}
}
import org.springframework.beans.factory.annotation.Value;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLDecoder;
import java.util.UUID;
public class FileUtil {
@Value("${uploadFilePath}")
private String uploadFilePath;
private FileUtil() {
}
/**
* File转换为byte[]
*/
public static byte[] getBytesByFile(File file) {
try {
//获取输入流
FileInputStream fis = new FileInputStream(file);
//新的 byte 数组输出流,缓冲区容量1024byte
ByteArrayOutputStream bos = new ByteArrayOutputStream(1024);
//缓存
byte[] b = new byte[1024];
int n;
while ((n = fis.read(b)) != -1) {
bos.write(b, 0, n);
}
fis.close();
//改变为byte[]
byte[] data = bos.toByteArray();
//
bos.close();
return data;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static void uploadFile(byte[] file, String filePath, String fileName) throws IOException {
File targetFile = new File(filePath);
if (!targetFile.exists()) {
if (!targetFile.mkdirs()) {
throw new IOException();
}
}
FileOutputStream out = null;
try {
out = new FileOutputStream(filePath + "/" + fileName);
out.write(file);
out.flush();
} catch (IOException e) {
throw new IOException();
} finally {
if (out != null) {
out.close();
}
}
}
public static boolean deleteFile(String fileName) {
File file = new File(fileName);
// 如果文件路径所对应的文件存在,并且是一个文件,则直接删除
if (file.exists() && file.isFile()) {
if (file.delete()) {
return true;
} else {
return false;
}
}
return false;
}
public static String renameToUUID(String fileName) {
return UUID.randomUUID() + "." + fileName.substring(fileName.lastIndexOf(".") + 1);
}
/**
* 文件删除方法
*/
public static boolean deleteQuietly(String fileAddress) {
File file = new File(fileAddress);
if (file == null) {
return false;
} else {
try {
if (file.isDirectory()) {
// cleanDirectory(file);
}
} catch (Exception var3) {
;
}
try {
return file.delete();
} catch (Exception var2) {
return false;
}
}
}
/**
* 下载本地文件
*/
public static void downloadLocal(HttpServletResponse response, String filePath,String encode) {
response.setContentType("text/html;charset=" + encode);
try {
// 读到流中
InputStream inStream = new FileInputStream(filePath); // 文件的存放路径
// path是指欲下载的文件的路径
File file = new File(filePath);
// 取得文件名
String fileName = file.getName();
// 设置输出的格式
response.reset();
response.setContentType("bin");
response.addHeader("Content-Disposition", "attachment; filename=\"" + new String(fileName.getBytes(encode), "ISO8859-1") + "\"");
// 循环取出流中的数据
byte[] b = new byte[100];
int len;
while ((len = inStream.read(b)) > 0) {
response.getOutputStream().write(b, 0, len);
}
inStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 通过文件路径直接修改文件名
*
* @param filePath 需要修改的文件的完整路径
* @param newFileName 需要修改的文件的名称
* @return
*/
public static String FixFileName(String filePath, String newFileName) {
File f = new File(filePath);
if (!f.exists()) { // 判断原文件是否存在(防止文件名冲突)
return null;
}
newFileName = newFileName.trim();
if ("".equals(newFileName) || newFileName == null) // 文件名不能为空
return null;
String newFilePath = null;
if (f.isDirectory()) { // 判断是否为文件夹
newFilePath = filePath.substring(0, filePath.lastIndexOf("/")) + "/" + newFileName;
} else {
newFilePath = filePath.substring(0, filePath.lastIndexOf("/")) + "/" + newFileName;
}
File nf = new File(newFilePath);
try {
f.renameTo(nf); // 修改文件名
} catch (Exception err) {
err.printStackTrace();
return null;
}
return newFilePath;
}
/*
*写文件
*/
public static boolean write(String filePath, String fileName, String fileContent) throws IOException {
boolean result = false;
File targetFile = new File(filePath);
if (!targetFile.exists()) {
if (!targetFile.mkdirs()) {
throw new IOException();
}
}
try {
FileOutputStream fs = new FileOutputStream(filePath+"/"+fileName);
//byte[] b = fileContent.getBytes();
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(fs, "UTF-8"));
/*
带bom的utf8
fs.write( 0xef );
fs.write( 0xbb);
fs.write( 0xbf);*/
writer.write(fileContent);
writer.flush();
writer.close();
result = true;
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
//需要注意的是当删除某一目录时,必须保证该目录下没有其他文件才能正确删除,否则将删除失败。
public static boolean deleteFolder(File folder) throws Exception {
boolean flag = false;
if (!folder.exists()) {
throw new Exception("文件不存在");
}
File[] files = folder.listFiles();
if (files != null) {
for (File file : files) {
if (file.isDirectory()) {
//递归直到目录下没有文件
deleteFolder(file);
// System.err.println("删除目录下所有文件");
flag=true;
} else {
//删除
file.delete();
// System.err.println("删除文件夹里面的文件");
flag=true;
}
}
}
//删除
folder.delete();
return flag;
}
public static void downloadFile(HttpServletResponse resp, String downloadPath) throws IOException {
String filePath = null;
try {
filePath= URLDecoder.decode(downloadPath,"UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
//String realPath = "D:" + File.separator + "apache-tomcat-8.5.15" + File.separator + "files";
String realPath=filePath;//项目路径下你存放文件的地方
File file = new File(realPath);
if(!file.exists()){
throw new IOException("文件不存在");
}
String name = new String(file.getName().getBytes("GBK"), "ISO-8859-1");
resp.reset();
/*
* 跨域配置
* */
resp.addHeader("Access-Control-Allow-Origin", "*");
resp.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
resp.addHeader("Access-Control-Allow-Headers", "Content-Type");
resp.setContentType("application/octet-stream");
resp.setCharacterEncoding("utf-8");
resp.setContentLength((int) file.length());
resp.setHeader("Content-Disposition", "attachment;filename=" + name);
byte[] buff = new byte[1024];
BufferedInputStream bis = null;
OutputStream os = null;
try {
os = resp.getOutputStream();
bis = new BufferedInputStream(new FileInputStream(file));
int i = 0;
while ((i = bis.read(buff)) != -1) {
os.write(buff, 0, i);
os.flush();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
import com.spire.doc.Document;
import com.spire.doc.FileFormat;
import freemarker.template.Configuration;
import freemarker.template.Template;
import org.apache.tomcat.util.codec.binary.Base64;
import org.springframework.stereotype.Component;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.HashMap;
import java.util.Map;
/**
*
* <p>Title: ftl模板文件转成word文件下载</p>
* <p>Description: </p>
* <p>Company: 常州培涵信息科技有限公司</p>
* <p>使用说明:
* 1.对于简单文件下载 只需要在map里面put
* 2.对于附属图片的需要调用makeImagePathToBASE64Encoder进行编码
* 3.对于循环需要使用List<Object> 此处Object为业务对象
* </p>
*/
@Component
public class FtlToWord {
private static Configuration configuration = null;
private static Map<String, Template> allTemplates = null;
/**
* 配置模板
* @param fileName
* @param filePath
*/
public static void configure(String fileName, String filePath) {
configuration = new Configuration();
configuration.setDefaultEncoding("utf-8");
configuration.setClassForTemplateLoading(FtlToWord.class, filePath);
allTemplates = new HashMap<String, Template>(); // Java 7 钻石语法
try {
allTemplates.put(fileName, configuration.getTemplate(fileName + ".ftl"));
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
/**
* 创建文档
*/
public static File createDoc(Map<?, ?> dataMap, String templateName) {
String name = "temp" + (int) (Math.random() * 100000) + ".doc";
File f = new File(name);
Template t = allTemplates.get(templateName);
try {
// 这个地方不能使用FileWriter因为需要指定编码类型否则生成的Word文档会因为有无法识别的编码而无法打开
Writer w = new OutputStreamWriter(new FileOutputStream(f), "utf-8");
t.process(dataMap, w);
w.close();
} catch (Exception ex) {
ex.printStackTrace();
throw new RuntimeException(ex);
}
return f;
}
/**
* 下载文档
*/
public static void downloadDoc(HttpServletResponse response, Map<?, ?> dataMap, String templateName, String downloadName) throws IOException {
File file = null;
InputStream fin = null;
ServletOutputStream out = null;
try {
// 调用工具类WordGenerator的createDoc方法生成Word文档
file = FtlToWord.createDoc(dataMap,templateName);
fin = new FileInputStream(file);
response.setCharacterEncoding("utf-8");
response.setContentType("application/msword");
// 设置浏览器以下载的方式处理该文件默认名为resume.doc
response.addHeader("Content-Disposition", "attachment;filename="+downloadName+".doc");
out = response.getOutputStream();
byte[] buffer = new byte[512]; // 缓冲区
int bytesToRead = -1;
// 通过循环将读入的Word文件的内容输出到浏览器中
while((bytesToRead = fin.read(buffer)) != -1) {
out.write(buffer, 0, bytesToRead);
}
} finally {
if(fin != null) fin.close();
if(out != null) out.close();
if(file != null) file.delete(); // 删除临时文件
}
}
public static String makeImagePathToBASE64Encoder(String imagePath) throws IOException {
/** 将图片转化为**/
InputStream in = null;
byte[] data = null;
try {
in = new FileInputStream(imagePath);
data = new byte[in.available()];
in.read(data);
in.close();
} catch (Exception e) {
e.printStackTrace();
}finally {
if(in != null){
in.close();
}
}
/** 进行base64位编码 只支持Java8**/
//Encoder encoder = Base64.getEncoder();
// String encodeToString = encoder.encodeToString(data);
String encodeToString = Base64.encodeBase64String(data);
return encodeToString;
}
/**
* 下载文档存到本地
*/
public static void downloadDocLocal(Map<?, ?> dataMap, String templateName, String downloadName,String path,String uuid) throws IOException {
File file = null;
InputStream fin = null;
// 存到本地
OutputStream os = null;
try {
// 调用工具类WordGenerator的createDoc方法生成Word文档
file = FtlToWord.createDoc(dataMap,templateName);
fin = new FileInputStream(file);
byte[] bs = new byte[1024];
// 读取到的数据长度
int len;
// 输出的文件流保存到本地文件
File tempFile = new File(path);
if (!tempFile.exists()) {
tempFile.mkdirs();
}
downloadName = new String(downloadName.getBytes("ISO-8859-1"), "utf-8");
os = new FileOutputStream(tempFile.getPath() + File.separator + downloadName+".doc");
// 开始读取,存到服务器
while ((len = fin.read(bs)) != -1) {
os.write(bs, 0, len);
}
} finally {
if(fin != null) fin.close();
if(os != null) os.close();
// if(out != null) out.close();
if(file != null) file.delete(); // 删除临时文件
}
}
public static void wordToPdf(String fileName,String fileNameToDown){
Document doc = new Document(fileName);
doc.saveToFile( fileNameToDown, FileFormat.PDF);
}
}
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import java.util.Map;
public class JsonUtil {
/**
* 将json转化成map
*/
public static Map<String, Object> convertJsonStrToMap(String jsonStr){
Map<String, Object> map = JSON.parseObject(
jsonStr,new TypeReference<Map<String, Object>>(){} );
return map;
}
}
public class ReturnValCode {
/**
* 操作失败的标志码
*/
public static final int RETURN_VALUE_CODES_FAIL = -1;
/**
* 操作成功的标志码
*/
public static final int RTN_VAL_CODE_SUCCESS = 0;
/**
* 登录成功
*/
public static final int LOGIN_SUCCESS = 101;
public static final int UN_LOGIN_OR_TIME_OUT = -101;
/**
* 登录失败-账户名或者密码错误
*/
public static final int LOGIN_FAIL = 102;
/**
* 非激活状态
*/
public static final int LOGIN_UN_ACTIV = 103;
/**
* 应用程序与数据库操作发生错误
*/
public static final int LOGIN_EXCEPTION = 104;
}
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Tools {
/**
* 获取当前的年月日的时间, 返回的格式形如pattern指定的格式, 默认的类型为yyyy-MM, 即返回 年-月<br/>
* pattern的格式参考jdk手册中的说明, 诸如yyyy-MM-dd
*/
public static String getDate(String pattern) {
if(pattern==null || "".equals(pattern))
pattern = "yyyy-MM";
return new SimpleDateFormat(pattern).format(new Date());
}
/**
* 字符串转成日期
*/
public static Date getDateStr(String pattern,String str) {
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
Date date = null;
try {
date = sdf.parse(str);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return date;
}
/**
* 获取timestamp时间戳
*/
public static Timestamp getTimestamp(String pattern) {
if(pattern==null || "".equals(pattern))
pattern = "yyyy-MM-dd HH:mm:ss";
return Timestamp.valueOf(new SimpleDateFormat(pattern).format(new Date()));
}
/**
* 获取timestamp时间戳
*/
public static Timestamp getTimes(String str,String pattern) {
//if(pattern==null || "".equals(pattern))
//pattern = "yyyy-MM-dd HH:mm:ss";
Timestamp ts = new Timestamp(System.currentTimeMillis());
ts = Timestamp.valueOf(str);
System.err.println("你好:"+ts);
return ts;
}
}
import com.cao.ftlword.service.CompanyService;
import com.cao.ftlword.utils.AjaxObj;
import com.cao.ftlword.utils.JsonUtil;
import com.cao.ftlword.utils.ReturnValCode;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
@RestController
@RequestMapping("/company")
public class CompanyController {
@Autowired
private CompanyService companyService;
// 新增方案与附件,修改方案与附件,根据uuid判断
@PostMapping("/insertCompany")
public AjaxObj insertProject(String info, HttpServletRequest request) {
Map<String, Object> infoMap = JsonUtil.convertJsonStrToMap(info);
companyService.insertCompanyAndAttach(infoMap,request);
return new AjaxObj(ReturnValCode.RTN_VAL_CODE_SUCCESS, "请求成功");
}
@GetMapping("/wordDownload")
public void wordDownload(String uuid,
HttpServletResponse response) throws Exception {
companyService.wordDownload(uuid,response);
}
}
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
@Data
public class Company {
@TableId
private String uuid; // 主键
private String name; // 公司名称
private String webUrl; // 网址
private String createUser; // 创始人
private String createTime; // 成立时间
private String dist; // 公司地址
private String range; // 经营范围
private String about; // 简介
}
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
@Data
public class CompanyAttach {
@TableId
private String uuid; // 主键
private String attachPath; // 附件路径
private String comId; // 公司id
}
这里我把两个写在一起,没有分开,开发的时候最好把mapper分开写
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.cao.ftlword.entity.Company;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.Date;
import java.util.List;
import java.util.Map;
@Repository
public interface CompanyMapper extends BaseMapper<Company> {
// 新增公司
void insertCompany(Map<String,Object> map);
// 新增附件
void insertCompanyAttach(Map<String,Object> map);
// 根据公司id获取到详情
Company selectCompany(@Param("uuid")String uuid);
// 根据公司id获取到相关图片
List<Map<String, Object>> selectCompanyAttach(@Param("uuid")String uuid);
}
package com.cao.ftlword.service;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
public interface CompanyService {
// 新增工程与附件
void insertCompanyAndAttach(Map<String,Object> info, HttpServletRequest request);
// 导出word
void wordDownload(String uuid, HttpServletResponse response);
}
import com.alibaba.fastjson.JSON;
import com.cao.ftlword.entity.Company;
import com.cao.ftlword.mapper.CompanyMapper;
import com.cao.ftlword.service.CompanyService;
import com.cao.ftlword.utils.CommUtils;
import com.cao.ftlword.utils.FileUtil;
import com.cao.ftlword.utils.FtlToWord;
import com.cao.ftlword.vo.WordVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
public class CompanyServiceImpl implements CompanyService {
@Autowired
private CompanyMapper companyMapper;
@Value("${uploadFilePath}")
private String uploadFilePath;
@Override
public void insertCompanyAndAttach(Map<String, Object> info, HttpServletRequest request) {
// 新增项目与文件
info.put("uuid", CommUtils.getUUID());
String projId = info.get("uuid") + "";
// 项目基本信息入库
companyMapper.insertCompany(info);
// 处理文件的map
Map<String, Object> map = new HashMap<>();
//处理附件
List<MultipartFile> files = ((MultipartHttpServletRequest) request).getFiles("files");
//上传图片
try {
if (!files.isEmpty()) {
for (int i = 0; i < files.size(); i++) {
MultipartFile file = files.get(i);
//获取文件全称 包含后缀
String fName = file.getOriginalFilename();
//截取文件后缀
String attachId = CommUtils.getUUID();
map.put("uuid", CommUtils.getUUID());
map.put("attach_path", "/word/" + projId + "/" + attachId + "/" + fName);
map.put("comId", projId);
// 存到数据库中
companyMapper.insertCompanyAttach(map);
// 上传文件到tomcat
FileUtil.uploadFile(file.getBytes(), uploadFilePath + "/word/" + projId + "/" + attachId,
fName);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void wordDownload(String uuid, HttpServletResponse response) {
// 1.根据公司id获取到详情,转化为map
Company company = companyMapper.selectCompany(uuid);
Map<String, Object> projectBaseInfo = JSON.parseObject(JSON.toJSONString(company), Map.class);
// 2.根据公司id获取到相关图片
List<Map<String, Object>> list = companyMapper.selectCompanyAttach(uuid);
// 3.存储到图片的路径集合
List<WordVo> image = new ArrayList<>();
// 4.循环获取
for (int i = 0; i < list.size(); i++) {
WordVo doc=new WordVo();
String attach_path = list.get(i).get("attach_path") + "";
String replace = attach_path.replace("\\", "\\");
try {
doc.setImage(FtlToWord.makeImagePathToBASE64Encoder(uploadFilePath+ File.separator+list.get(i).get("attach_path")));
} catch (IOException e) {
e.printStackTrace();
}
image.add(doc);
}
//----------------------------------------------------------------
projectBaseInfo.put("image", image);
//将信息添加到Map里,附件,配置模板,配置模板
String fileName = "简介";
String filePath = "/templates";
FtlToWord.configure(fileName, filePath);
//下载word
String templateName = "简介";
String downloadName = projectBaseInfo.get("name")+"简介";
try {
downloadName = new String(downloadName.getBytes("utf-8"), "ISO-8859-1");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
try {
FtlToWord.downloadDoc(response, projectBaseInfo, templateName, downloadName);
} catch (IOException e) {
e.printStackTrace();
}
}
}
import lombok.Data;
@Data
public class WordVo {
private String image; // 过程图片
}
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.cao.ftlword.mapper")
public class FtlWordApplication {
public static void main(String[] args) {
SpringApplication.run(FtlWordApplication.class, args);
System.err.println("*********ftl导出word项目启动成功*********");
}
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.cao.ftlword.mapper.CompanyMapper">
<insert id="insertCompany">
insert into t_company(uuid,name,web_url,create_user,create_time,dist,range,about)
values(#{uuid},#{name},#{webUrl},#{createUser},#{createTime},#{dist},#{range},#{about})
</insert>
<insert id="insertCompanyAttach">
insert into t_company_attach(uuid,attach_path,com_id)
values(#{uuid},#{attach_path},#{comId})
</insert>
<select id="selectCompany" resultType="com.cao.ftlword.entity.Company">
select * from t_company where uuid=#{uuid}
</select>
<select id="selectCompanyAttach" resultType="map">
select * from t_company_attach where com_id=#{uuid}
</select>
</mapper>
简介.ftl
<#setting classic_compatible=true> 参数为空则不会报错
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?mso-application progid="Word.Document"?>
<#setting classic_compatible=true>
<w:wordDocument
xmlns:aml="http://schemas.microsoft.com/aml/2001/core"
xmlns:wpc="http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas"
xmlns:cx="http://schemas.microsoft.com/office/drawing/2014/chartex"
xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:v="urn:schemas-microsoft-com:vml"
xmlns:w10="urn:schemas-microsoft-com:office:word"
xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml"
xmlns:wx="http://schemas.microsoft.com/office/word/2003/auxHint"
xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml"
xmlns:wsp="http://schemas.microsoft.com/office/word/2003/wordml/sp2"
xmlns:sl="http://schemas.microsoft.com/schemaLibrary/2003/core" w:macrosPresent="no" w:embeddedObjPresent="no" w:ocxPresent="no" xml:space="preserve">
<w:ignoreSubtree w:val="http://schemas.microsoft.com/office/word/2003/wordml/sp2"/>
<o:DocumentProperties>
<o:Author>kris</o:Author>
<o:LastAuthor>kris</o:LastAuthor>
<o:Revision>2</o:Revision>
<o:TotalTime>1</o:TotalTime>
<o:Created>2021-03-25T06:36:00Z</o:Created>
<o:LastSaved>2021-03-25T06:36:00Z</o:LastSaved>
<o:Pages>1</o:Pages>
<o:Words>19</o:Words>
<o:Characters>111</o:Characters>
<o:Lines>1</o:Lines>
<o:Paragraphs>1</o:Paragraphs>
<o:CharactersWithSpaces>129</o:CharactersWithSpaces>
<o:Version>16</o:Version>
</o:DocumentProperties>
<w:fonts>
<w:defaultFonts w:ascii="等线" w:fareast="等线" w:h-ansi="等线" w:cs="Times New Roman"/>
<w:font w:name="Times New Roman">
<w:panose-1 w:val="02020603050405020304"/>
<w:charset w:val="00"/>
<w:family w:val="Roman"/>
<w:pitch w:val="variable"/>
<w:sig w:usb-0="E0002EFF" w:usb-1="C000785B" w:usb-2="00000009" w:usb-3="00000000" w:csb-0="000001FF" w:csb-1="00000000"/>
</w:font>
<w:font w:name="宋体">
<w:altName w:val="SimSun"/>
<w:panose-1 w:val="02010600030101010101"/>
<w:charset w:val="86"/>
<w:family w:val="auto"/>
<w:pitch w:val="variable"/>
<w:sig w:usb-0="00000003" w:usb-1="288F0000" w:usb-2="00000016" w:usb-3="00000000" w:csb-0="00040001" w:csb-1="00000000"/>
</w:font>
<w:font w:name="宋体">
<w:altName w:val="SimSun"/>
<w:panose-1 w:val="02010600030101010101"/>
<w:charset w:val="86"/>
<w:family w:val="auto"/>
<w:pitch w:val="variable"/>
<w:sig w:usb-0="00000003" w:usb-1="288F0000" w:usb-2="00000016" w:usb-3="00000000" w:csb-0="00040001" w:csb-1="00000000"/>
</w:font>
<w:font w:name="等线">
<w:altName w:val="DengXian"/>
<w:panose-1 w:val="02010600030101010101"/>
<w:charset w:val="86"/>
<w:family w:val="auto"/>
<w:pitch w:val="variable"/>
<w:sig w:usb-0="A00002BF" w:usb-1="38CF7CFA" w:usb-2="00000016" w:usb-3="00000000" w:csb-0="0004000F" w:csb-1="00000000"/>
</w:font>
<w:font w:name="微软雅黑">
<w:panose-1 w:val="020B0503020204020204"/>
<w:charset w:val="86"/>
<w:family w:val="Swiss"/>
<w:pitch w:val="variable"/>
<w:sig w:usb-0="80000287" w:usb-1="2ACF3C50" w:usb-2="00000016" w:usb-3="00000000" w:csb-0="0004001F" w:csb-1="00000000"/>
</w:font>
<w:font w:name="@宋体">
<w:panose-1 w:val="02010600030101010101"/>
<w:charset w:val="86"/>
<w:family w:val="auto"/>
<w:pitch w:val="variable"/>
<w:sig w:usb-0="00000003" w:usb-1="288F0000" w:usb-2="00000016" w:usb-3="00000000" w:csb-0="00040001" w:csb-1="00000000"/>
</w:font>
<w:font w:name="@微软雅黑">
<w:charset w:val="86"/>
<w:family w:val="Swiss"/>
<w:pitch w:val="variable"/>
<w:sig w:usb-0="80000287" w:usb-1="2ACF3C50" w:usb-2="00000016" w:usb-3="00000000" w:csb-0="0004001F" w:csb-1="00000000"/>
</w:font>
<w:font w:name="@等线">
<w:panose-1 w:val="02010600030101010101"/>
<w:charset w:val="86"/>
<w:family w:val="auto"/>
<w:pitch w:val="variable"/>
<w:sig w:usb-0="A00002BF" w:usb-1="38CF7CFA" w:usb-2="00000016" w:usb-3="00000000" w:csb-0="0004000F" w:csb-1="00000000"/>
</w:font>
</w:fonts>
<w:styles>
<w:versionOfBuiltInStylenames w:val="7"/>
<w:latentStyles w:defLockedState="off" w:latentStyleCount="371">
<w:lsdException w:name="Normal"/>
<w:lsdException w:name="heading 1"/>
<w:lsdException w:name="heading 2"/>
<w:lsdException w:name="heading 3"/>
<w:lsdException w:name="heading 4"/>
<w:lsdException w:name="heading 5"/>
<w:lsdException w:name="heading 6"/>
<w:lsdException w:name="heading 7"/>
<w:lsdException w:name="heading 8"/>
<w:lsdException w:name="heading 9"/>
<w:lsdException w:name="index 1"/>
<w:lsdException w:name="index 2"/>
<w:lsdException w:name="index 3"/>
<w:lsdException w:name="index 4"/>
<w:lsdException w:name="index 5"/>
<w:lsdException w:name="index 6"/>
<w:lsdException w:name="index 7"/>
<w:lsdException w:name="index 8"/>
<w:lsdException w:name="index 9"/>
<w:lsdException w:name="toc 1"/>
<w:lsdException w:name="toc 2"/>
<w:lsdException w:name="toc 3"/>
<w:lsdException w:name="toc 4"/>
<w:lsdException w:name="toc 5"/>
<w:lsdException w:name="toc 6"/>
<w:lsdException w:name="toc 7"/>
<w:lsdException w:name="toc 8"/>
<w:lsdException w:name="toc 9"/>
<w:lsdException w:name="Normal Indent"/>
<w:lsdException w:name="footnote text"/>
<w:lsdException w:name="annotation text"/>
<w:lsdException w:name="header"/>
<w:lsdException w:name="footer"/>
<w:lsdException w:name="index heading"/>
<w:lsdException w:name="caption"/>
<w:lsdException w:name="table of figures"/>
<w:lsdException w:name="envelope address"/>
<w:lsdException w:name="envelope return"/>
<w:lsdException w:name="footnote reference"/>
<w:lsdException w:name="annotation reference"/>
<w:lsdException w:name="line number"/>
<w:lsdException w:name="page number"/>
<w:lsdException w:name="endnote reference"/>
<w:lsdException w:name="endnote text"/>
<w:lsdException w:name="table of authorities"/>
<w:lsdException w:name="macro"/>
<w:lsdException w:name="toa heading"/>
<w:lsdException w:name="List"/>
<w:lsdException w:name="List Bullet"/>
<w:lsdException w:name="List Number"/>
<w:lsdException w:name="List 2"/>
<w:lsdException w:name="List 3"/>
<w:lsdException w:name="List 4"/>
<w:lsdException w:name="List 5"/>
<w:lsdException w:name="List Bullet 2"/>
<w:lsdException w:name="List Bullet 3"/>
<w:lsdException w:name="List Bullet 4"/>
<w:lsdException w:name="List Bullet 5"/>
<w:lsdException w:name="List Number 2"/>
<w:lsdException w:name="List Number 3"/>
<w:lsdException w:name="List Number 4"/>
<w:lsdException w:name="List Number 5"/>
<w:lsdException w:name="Title"/>
<w:lsdException w:name="Closing"/>
<w:lsdException w:name="Signature"/>
<w:lsdException w:name="Default Paragraph Font"/>
<w:lsdException w:name="Body Text"/>
<w:lsdException w:name="Body Text Indent"/>
<w:lsdException w:name="List Continue"/>
<w:lsdException w:name="List Continue 2"/>
<w:lsdException w:name="List Continue 3"/>
<w:lsdException w:name="List Continue 4"/>
<w:lsdException w:name="List Continue 5"/>
<w:lsdException w:name="Message Header"/>
<w:lsdException w:name="Subtitle"/>
<w:lsdException w:name="Salutation"/>
<w:lsdException w:name="Date"/>
<w:lsdException w:name="Body Text First Indent"/>
<w:lsdException w:name="Body Text First Indent 2"/>
<w:lsdException w:name="Note Heading"/>
<w:lsdException w:name="Body Text 2"/>
<w:lsdException w:name="Body Text 3"/>
<w:lsdException w:name="Body Text Indent 2"/>
<w:lsdException w:name="Body Text Indent 3"/>
<w:lsdException w:name="Block Text"/>
<w:lsdException w:name="Hyperlink"/>
<w:lsdException w:name="FollowedHyperlink"/>
<w:lsdException w:name="Strong"/>
<w:lsdException w:name="Emphasis"/>
<w:lsdException w:name="Document Map"/>
<w:lsdException w:name="Plain Text"/>
<w:lsdException w:name="E-mail Signature"/>
<w:lsdException w:name="HTML Top of Form"/>
<w:lsdException w:name="HTML Bottom of Form"/>
<w:lsdException w:name="Normal (Web)"/>
<w:lsdException w:name="HTML Acronym"/>
<w:lsdException w:name="HTML Address"/>
<w:lsdException w:name="HTML Cite"/>
<w:lsdException w:name="HTML Code"/>
<w:lsdException w:name="HTML Definition"/>
<w:lsdException w:name="HTML Keyboard"/>
<w:lsdException w:name="HTML Preformatted"/>
<w:lsdException w:name="HTML Sample"/>
<w:lsdException w:name="HTML Typewriter"/>
<w:lsdException w:name="HTML Variable"/>
<w:lsdException w:name="Normal Table"/>
<w:lsdException w:name="annotation subject"/>
<w:lsdException w:name="No List"/>
<w:lsdException w:name="Outline List 1"/>
<w:lsdException w:name="Outline List 2"/>
<w:lsdException w:name="Outline List 3"/>
<w:lsdException w:name="Table Simple 1"/>
<w:lsdException w:name="Table Simple 2"/>
<w:lsdException w:name="Table Simple 3"/>
<w:lsdException w:name="Table Classic 1"/>
<w:lsdException w:name="Table Classic 2"/>
<w:lsdException w:name="Table Classic 3"/>
<w:lsdException w:name="Table Classic 4"/>
<w:lsdException w:name="Table Colorful 1"/>
<w:lsdException w:name="Table Colorful 2"/>
<w:lsdException w:name="Table Colorful 3"/>
<w:lsdException w:name="Table Columns 1"/>
<w:lsdException w:name="Table Columns 2"/>
<w:lsdException w:name="Table Columns 3"/>
<w:lsdException w:name="Table Columns 4"/>
<w:lsdException w:name="Table Columns 5"/>
<w:lsdException w:name="Table Grid 1"/>
<w:lsdException w:name="Table Grid 2"/>
<w:lsdException w:name="Table Grid 3"/>
<w:lsdException w:name="Table Grid 4"/>
<w:lsdException w:name="Table Grid 5"/>
<w:lsdException w:name="Table Grid 6"/>
<w:lsdException w:name="Table Grid 7"/>
<w:lsdException w:name="Table Grid 8"/>
<w:lsdException w:name="Table List 1"/>
<w:lsdException w:name="Table List 2"/>
<w:lsdException w:name="Table List 3"/>
<w:lsdException w:name="Table List 4"/>
<w:lsdException w:name="Table List 5"/>
<w:lsdException w:name="Table List 6"/>
<w:lsdException w:name="Table List 7"/>
<w:lsdException w:name="Table List 8"/>
<w:lsdException w:name="Table 3D effects 1"/>
<w:lsdException w:name="Table 3D effects 2"/>
<w:lsdException w:name="Table 3D effects 3"/>
<w:lsdException w:name="Table Contemporary"/>
<w:lsdException w:name="Table Elegant"/>
<w:lsdException w:name="Table Professional"/>
<w:lsdException w:name="Table Subtle 1"/>
<w:lsdException w:name="Table Subtle 2"/>
<w:lsdException w:name="Table Web 1"/>
<w:lsdException w:name="Table Web 2"/>
<w:lsdException w:name="Table Web 3"/>
<w:lsdException w:name="Balloon Text"/>
<w:lsdException w:name="Table Grid"/>
<w:lsdException w:name="Table Theme"/>
<w:lsdException w:name="Placeholder Text"/>
<w:lsdException w:name="No Spacing"/>
<w:lsdException w:name="Light Shading"/>
<w:lsdException w:name="Light List"/>
<w:lsdException w:name="Light Grid"/>
<w:lsdException w:name="Medium Shading 1"/>
<w:lsdException w:name="Medium Shading 2"/>
<w:lsdException w:name="Medium List 1"/>
<w:lsdException w:name="Medium List 2"/>
<w:lsdException w:name="Medium Grid 1"/>
<w:lsdException w:name="Medium Grid 2"/>
<w:lsdException w:name="Medium Grid 3"/>
<w:lsdException w:name="Dark List"/>
<w:lsdException w:name="Colorful Shading"/>
<w:lsdException w:name="Colorful List"/>
<w:lsdException w:name="Colorful Grid"/>
<w:lsdException w:name="Light Shading Accent 1"/>
<w:lsdException w:name="Light List Accent 1"/>
<w:lsdException w:name="Light Grid Accent 1"/>
<w:lsdException w:name="Medium Shading 1 Accent 1"/>
<w:lsdException w:name="Medium Shading 2 Accent 1"/>
<w:lsdException w:name="Medium List 1 Accent 1"/>
<w:lsdException w:name="Revision"/>
<w:lsdException w:name="List Paragraph"/>
<w:lsdException w:name="Quote"/>
<w:lsdException w:name="Intense Quote"/>
<w:lsdException w:name="Medium List 2 Accent 1"/>
<w:lsdException w:name="Medium Grid 1 Accent 1"/>
<w:lsdException w:name="Medium Grid 2 Accent 1"/>
<w:lsdException w:name="Medium Grid 3 Accent 1"/>
<w:lsdException w:name="Dark List Accent 1"/>
<w:lsdException w:name="Colorful Shading Accent 1"/>
<w:lsdException w:name="Colorful List Accent 1"/>
<w:lsdException w:name="Colorful Grid Accent 1"/>
<w:lsdException w:name="Light Shading Accent 2"/>
<w:lsdException w:name="Light List Accent 2"/>
<w:lsdException w:name="Light Grid Accent 2"/>
<w:lsdException w:name="Medium Shading 1 Accent 2"/>
<w:lsdException w:name="Medium Shading 2 Accent 2"/>
<w:lsdException w:name="Medium List 1 Accent 2"/>
<w:lsdException w:name="Medium List 2 Accent 2"/>
<w:lsdException w:name="Medium Grid 1 Accent 2"/>
<w:lsdException w:name="Medium Grid 2 Accent 2"/>
<w:lsdException w:name="Medium Grid 3 Accent 2"/>
<w:lsdException w:name="Dark List Accent 2"/>
<w:lsdException w:name="Colorful Shading Accent 2"/>
<w:lsdException w:name="Colorful List Accent 2"/>
<w:lsdException w:name="Colorful Grid Accent 2"/>
<w:lsdException w:name="Light Shading Accent 3"/>
<w:lsdException w:name="Light List Accent 3"/>
<w:lsdException w:name="Light Grid Accent 3"/>
<w:lsdException w:name="Medium Shading 1 Accent 3"/>
<w:lsdException w:name="Medium Shading 2 Accent 3"/>
<w:lsdException w:name="Medium List 1 Accent 3"/>
<w:lsdException w:name="Medium List 2 Accent 3"/>
<w:lsdException w:name="Medium Grid 1 Accent 3"/>
<w:lsdException w:name="Medium Grid 2 Accent 3"/>
<w:lsdException w:name="Medium Grid 3 Accent 3"/>
<w:lsdException w:name="Dark List Accent 3"/>
<w:lsdException w:name="Colorful Shading Accent 3"/>
<w:lsdException w:name="Colorful List Accent 3"/>
<w:lsdException w:name="Colorful Grid Accent 3"/>
<w:lsdException w:name="Light Shading Accent 4"/>
<w:lsdException w:name="Light List Accent 4"/>
<w:lsdException w:name="Light Grid Accent 4"/>
<w:lsdException w:name="Medium Shading 1 Accent 4"/>
<w:lsdException w:name="Medium Shading 2 Accent 4"/>
<w:lsdException w:name="Medium List 1 Accent 4"/>
<w:lsdException w:name="Medium List 2 Accent 4"/>
<w:lsdException w:name="Medium Grid 1 Accent 4"/>
<w:lsdException w:name="Medium Grid 2 Accent 4"/>
<w:lsdException w:name="Medium Grid 3 Accent 4"/>
<w:lsdException w:name="Dark List Accent 4"/>
<w:lsdException w:name="Colorful Shading Accent 4"/>
<w:lsdException w:name="Colorful List Accent 4"/>
<w:lsdException w:name="Colorful Grid Accent 4"/>
<w:lsdException w:name="Light Shading Accent 5"/>
<w:lsdException w:name="Light List Accent 5"/>
<w:lsdException w:name="Light Grid Accent 5"/>
<w:lsdException w:name="Medium Shading 1 Accent 5"/>
<w:lsdException w:name="Medium Shading 2 Accent 5"/>
<w:lsdException w:name="Medium List 1 Accent 5"/>
<w:lsdException w:name="Medium List 2 Accent 5"/>
<w:lsdException w:name="Medium Grid 1 Accent 5"/>
<w:lsdException w:name="Medium Grid 2 Accent 5"/>
<w:lsdException w:name="Medium Grid 3 Accent 5"/>
<w:lsdException w:name="Dark List Accent 5"/>
<w:lsdException w:name="Colorful Shading Accent 5"/>
<w:lsdException w:name="Colorful List Accent 5"/>
<w:lsdException w:name="Colorful Grid Accent 5"/>
<w:lsdException w:name="Light Shading Accent 6"/>
<w:lsdException w:name="Light List Accent 6"/>
<w:lsdException w:name="Light Grid Accent 6"/>
<w:lsdException w:name="Medium Shading 1 Accent 6"/>
<w:lsdException w:name="Medium Shading 2 Accent 6"/>
<w:lsdException w:name="Medium List 1 Accent 6"/>
<w:lsdException w:name="Medium List 2 Accent 6"/>
<w:lsdException w:name="Medium Grid 1 Accent 6"/>
<w:lsdException w:name="Medium Grid 2 Accent 6"/>
<w:lsdException w:name="Medium Grid 3 Accent 6"/>
<w:lsdException w:name="Dark List Accent 6"/>
<w:lsdException w:name="Colorful Shading Accent 6"/>
<w:lsdException w:name="Colorful List Accent 6"/>
<w:lsdException w:name="Colorful Grid Accent 6"/>
<w:lsdException w:name="Subtle Emphasis"/>
<w:lsdException w:name="Intense Emphasis"/>
<w:lsdException w:name="Subtle Reference"/>
<w:lsdException w:name="Intense Reference"/>
<w:lsdException w:name="Book Title"/>
<w:lsdException w:name="Bibliography"/>
<w:lsdException w:name="TOC Heading"/>
<w:lsdException w:name="Plain Table 1"/>
<w:lsdException w:name="Plain Table 2"/>
<w:lsdException w:name="Plain Table 3"/>
<w:lsdException w:name="Plain Table 4"/>
<w:lsdException w:name="Plain Table 5"/>
<w:lsdException w:name="Grid Table Light"/>
<w:lsdException w:name="Grid Table 1 Light"/>
<w:lsdException w:name="Grid Table 2"/>
<w:lsdException w:name="Grid Table 3"/>
<w:lsdException w:name="Grid Table 4"/>
<w:lsdException w:name="Grid Table 5 Dark"/>
<w:lsdException w:name="Grid Table 6 Colorful"/>
<w:lsdException w:name="Grid Table 7 Colorful"/>
<w:lsdException w:name="Grid Table 1 Light Accent 1"/>
<w:lsdException w:name="Grid Table 2 Accent 1"/>
<w:lsdException w:name="Grid Table 3 Accent 1"/>
<w:lsdException w:name="Grid Table 4 Accent 1"/>
<w:lsdException w:name="Grid Table 5 Dark Accent 1"/>
<w:lsdException w:name="Grid Table 6 Colorful Accent 1"/>
<w:lsdException w:name="Grid Table 7 Colorful Accent 1"/>
<w:lsdException w:name="Grid Table 1 Light Accent 2"/>
<w:lsdException w:name="Grid Table 2 Accent 2"/>
<w:lsdException w:name="Grid Table 3 Accent 2"/>
<w:lsdException w:name="Grid Table 4 Accent 2"/>
<w:lsdException w:name="Grid Table 5 Dark Accent 2"/>
<w:lsdException w:name="Grid Table 6 Colorful Accent 2"/>
<w:lsdException w:name="Grid Table 7 Colorful Accent 2"/>
<w:lsdException w:name="Grid Table 1 Light Accent 3"/>
<w:lsdException w:name="Grid Table 2 Accent 3"/>
<w:lsdException w:name="Grid Table 3 Accent 3"/>
<w:lsdException w:name="Grid Table 4 Accent 3"/>
<w:lsdException w:name="Grid Table 5 Dark Accent 3"/>
<w:lsdException w:name="Grid Table 6 Colorful Accent 3"/>
<w:lsdException w:name="Grid Table 7 Colorful Accent 3"/>
<w:lsdException w:name="Grid Table 1 Light Accent 4"/>
<w:lsdException w:name="Grid Table 2 Accent 4"/>
<w:lsdException w:name="Grid Table 3 Accent 4"/>
<w:lsdException w:name="Grid Table 4 Accent 4"/>
<w:lsdException w:name="Grid Table 5 Dark Accent 4"/>
<w:lsdException w:name="Grid Table 6 Colorful Accent 4"/>
<w:lsdException w:name="Grid Table 7 Colorful Accent 4"/>
<w:lsdException w:name="Grid Table 1 Light Accent 5"/>
<w:lsdException w:name="Grid Table 2 Accent 5"/>
<w:lsdException w:name="Grid Table 3 Accent 5"/>
<w:lsdException w:name="Grid Table 4 Accent 5"/>
<w:lsdException w:name="Grid Table 5 Dark Accent 5"/>
<w:lsdException w:name="Grid Table 6 Colorful Accent 5"/>
<w:lsdException w:name="Grid Table 7 Colorful Accent 5"/>
<w:lsdException w:name="Grid Table 1 Light Accent 6"/>
<w:lsdException w:name="Grid Table 2 Accent 6"/>
<w:lsdException w:name="Grid Table 3 Accent 6"/>
<w:lsdException w:name="Grid Table 4 Accent 6"/>
<w:lsdException w:name="Grid Table 5 Dark Accent 6"/>
<w:lsdException w:name="Grid Table 6 Colorful Accent 6"/>
<w:lsdException w:name="Grid Table 7 Colorful Accent 6"/>
<w:lsdException w:name="List Table 1 Light"/>
<w:lsdException w:name="List Table 2"/>
<w:lsdException w:name="List Table 3"/>
<w:lsdException w:name="List Table 4"/>
<w:lsdException w:name="List Table 5 Dark"/>
<w:lsdException w:name="List Table 6 Colorful"/>
<w:lsdException w:name="List Table 7 Colorful"/>
<w:lsdException w:name="List Table 1 Light Accent 1"/>
<w:lsdException w:name="List Table 2 Accent 1"/>
<w:lsdException w:name="List Table 3 Accent 1"/>
<w:lsdException w:name="List Table 4 Accent 1"/>
<w:lsdException w:name="List Table 5 Dark Accent 1"/>
<w:lsdException w:name="List Table 6 Colorful Accent 1"/>
<w:lsdException w:name="List Table 7 Colorful Accent 1"/>
<w:lsdException w:name="List Table 1 Light Accent 2"/>
<w:lsdException w:name="List Table 2 Accent 2"/>
<w:lsdException w:name="List Table 3 Accent 2"/>
<w:lsdException w:name="List Table 4 Accent 2"/>
<w:lsdException w:name="List Table 5 Dark Accent 2"/>
<w:lsdException w:name="List Table 6 Colorful Accent 2"/>
<w:lsdException w:name="List Table 7 Colorful Accent 2"/>
<w:lsdException w:name="List Table 1 Light Accent 3"/>
<w:lsdException w:name="List Table 2 Accent 3"/>
<w:lsdException w:name="List Table 3 Accent 3"/>
<w:lsdException w:name="List Table 4 Accent 3"/>
<w:lsdException w:name="List Table 5 Dark Accent 3"/>
<w:lsdException w:name="List Table 6 Colorful Accent 3"/>
<w:lsdException w:name="List Table 7 Colorful Accent 3"/>
<w:lsdException w:name="List Table 1 Light Accent 4"/>
<w:lsdException w:name="List Table 2 Accent 4"/>
<w:lsdException w:name="List Table 3 Accent 4"/>
<w:lsdException w:name="List Table 4 Accent 4"/>
<w:lsdException w:name="List Table 5 Dark Accent 4"/>
<w:lsdException w:name="List Table 6 Colorful Accent 4"/>
<w:lsdException w:name="List Table 7 Colorful Accent 4"/>
<w:lsdException w:name="List Table 1 Light Accent 5"/>
<w:lsdException w:name="List Table 2 Accent 5"/>
<w:lsdException w:name="List Table 3 Accent 5"/>
<w:lsdException w:name="List Table 4 Accent 5"/>
<w:lsdException w:name="List Table 5 Dark Accent 5"/>
<w:lsdException w:name="List Table 6 Colorful Accent 5"/>
<w:lsdException w:name="List Table 7 Colorful Accent 5"/>
<w:lsdException w:name="List Table 1 Light Accent 6"/>
<w:lsdException w:name="List Table 2 Accent 6"/>
<w:lsdException w:name="List Table 3 Accent 6"/>
<w:lsdException w:name="List Table 4 Accent 6"/>
<w:lsdException w:name="List Table 5 Dark Accent 6"/>
<w:lsdException w:name="List Table 6 Colorful Accent 6"/>
<w:lsdException w:name="List Table 7 Colorful Accent 6"/>
</w:latentStyles>
<w:style w:type="paragraph" w:default="on" w:styleId="a">
<w:name w:val="Normal"/>
<wx:uiName wx:val="正文"/>
<w:pPr>
<w:widowControl w:val="off"/>
<w:jc w:val="both"/>
</w:pPr>
<w:rPr>
<wx:font wx:val="等线"/>
<w:kern w:val="2"/>
<w:sz w:val="21"/>
<w:sz-cs w:val="22"/>
<w:lang w:val="EN-US" w:fareast="ZH-CN" w:bidi="AR-SA"/>
</w:rPr>
</w:style>
<w:style w:type="character" w:default="on" w:styleId="a0">
<w:name w:val="Default Paragraph Font"/>
<wx:uiName wx:val="默认段落字体"/>
</w:style>
<w:style w:type="table" w:default="on" w:styleId="a1">
<w:name w:val="Normal Table"/>
<wx:uiName wx:val="普通表格"/>
<w:rPr>
<wx:font wx:val="等线"/>
<w:lang w:val="EN-US" w:fareast="ZH-CN" w:bidi="AR-SA"/>
</w:rPr>
<w:tblPr>
<w:tblInd w:w="0" w:type="dxa"/>
<w:tblCellMar>
<w:top w:w="0" w:type="dxa"/>
<w:left w:w="108" w:type="dxa"/>
<w:bottom w:w="0" w:type="dxa"/>
<w:right w:w="108" w:type="dxa"/>
</w:tblCellMar>
</w:tblPr>
</w:style>
<w:style w:type="list" w:default="on" w:styleId="a2">
<w:name w:val="No List"/>
<wx:uiName wx:val="无列表"/>
</w:style>
<w:style w:type="table" w:styleId="a3">
<w:name w:val="Table Grid"/>
<wx:uiName wx:val="网格型"/>
<w:basedOn w:val="a1"/>
<w:rsid w:val="00B62005"/>
<w:rPr>
<wx:font wx:val="等线"/>
</w:rPr>
<w:tblPr>
<w:tblBorders>
<w:top w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
<w:left w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
<w:bottom w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
<w:right w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
<w:insideH w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
<w:insideV w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
</w:tblBorders>
</w:tblPr>
</w:style>
<w:style w:type="character" w:styleId="a4">
<w:name w:val="annotation reference"/>
<wx:uiName wx:val="批注引用"/>
<w:rsid w:val="00B62005"/>
<w:rPr>
<w:sz w:val="21"/>
<w:sz-cs w:val="21"/>
</w:rPr>
</w:style>
<w:style w:type="paragraph" w:styleId="a5">
<w:name w:val="annotation text"/>
<wx:uiName wx:val="批注文字"/>
<w:basedOn w:val="a"/>
<w:link w:val="a6"/>
<w:rsid w:val="00B62005"/>
<w:pPr>
<w:jc w:val="left"/>
</w:pPr>
<w:rPr>
<wx:font wx:val="等线"/>
</w:rPr>
</w:style>
<w:style w:type="character" w:styleId="a6">
<w:name w:val="批注文字 字符"/>
<w:basedOn w:val="a0"/>
<w:link w:val="a5"/>
<w:rsid w:val="00B62005"/>
</w:style>
<w:style w:type="paragraph" w:styleId="a7">
<w:name w:val="annotation subject"/>
<wx:uiName wx:val="批注主题"/>
<w:basedOn w:val="a5"/>
<w:next w:val="a5"/>
<w:link w:val="a8"/>
<w:rsid w:val="00B62005"/>
<w:rPr>
<wx:font wx:val="等线"/>
<w:b/>
<w:b-cs/>
</w:rPr>
</w:style>
<w:style w:type="character" w:styleId="a8">
<w:name w:val="批注主题 字符"/>
<w:link w:val="a7"/>
<w:rsid w:val="00B62005"/>
<w:rPr>
<w:b/>
<w:b-cs/>
</w:rPr>
</w:style>
<w:style w:type="paragraph" w:styleId="a9">
<w:name w:val="Balloon Text"/>
<wx:uiName wx:val="批注框文本"/>
<w:basedOn w:val="a"/>
<w:link w:val="aa"/>
<w:rsid w:val="00B62005"/>
<w:rPr>
<wx:font wx:val="等线"/>
<w:sz w:val="18"/>
<w:sz-cs w:val="18"/>
</w:rPr>
</w:style>
<w:style w:type="character" w:styleId="aa">
<w:name w:val="批注框文本 字符"/>
<w:link w:val="a9"/>
<w:rsid w:val="00B62005"/>
<w:rPr>
<w:sz w:val="18"/>
<w:sz-cs w:val="18"/>
</w:rPr>
</w:style>
</w:styles>
<w:shapeDefaults>
<o:shapedefaults v:ext="edit" spidmax="1026"/>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1"/>
</o:shapelayout>
</w:shapeDefaults>
<w:docPr>
<w:view w:val="print"/>
<w:zoom w:percent="100"/>
<w:doNotEmbedSystemFonts/>
<w:bordersDontSurroundHeader/>
<w:bordersDontSurroundFooter/>
<w:defaultTabStop w:val="420"/>
<w:drawingGridVerticalSpacing w:val="156"/>
<w:displayHorizontalDrawingGridEvery w:val="0"/>
<w:displayVerticalDrawingGridEvery w:val="2"/>
<w:punctuationKerning/>
<w:characterSpacingControl w:val="CompressPunctuation"/>
<w:optimizeForBrowser/>
<w:allowPNG/>
<w:validateAgainstSchema/>
<w:saveInvalidXML w:val="off"/>
<w:ignoreMixedContent w:val="off"/>
<w:alwaysShowPlaceholderText w:val="off"/>
<w:compat>
<w:spaceForUL/>
<w:balanceSingleByteDoubleByteWidth/>
<w:doNotLeaveBackslashAlone/>
<w:ulTrailSpace/>
<w:doNotExpandShiftReturn/>
<w:adjustLineHeightInTable/>
<w:breakWrappedTables/>
<w:snapToGridInCell/>
<w:wrapTextWithPunct/>
<w:useAsianBreakRules/>
<w:dontGrowAutofit/>
<w:useFELayout/>
</w:compat>
<wsp:rsids>
<wsp:rsidRoot wsp:val="00B62005"/>
<wsp:rsid wsp:val="002B098C"/>
<wsp:rsid wsp:val="00335F0E"/>
<wsp:rsid wsp:val="00510709"/>
<wsp:rsid wsp:val="008C605D"/>
<wsp:rsid wsp:val="00B62005"/>
</wsp:rsids>
</w:docPr>
<w:body>
<wx:sect>
<w:p wsp:rsidR="008C605D" wsp:rsidRDefault="00335F0E" wsp:rsidP="00B62005">
<w:pPr>
<w:jc w:val="center"/>
<w:rPr>
<w:rFonts w:ascii="微软雅黑" w:fareast="微软雅黑" w:h-ansi="微软雅黑"/>
<wx:font wx:val="微软雅黑"/>
<w:b/>
<w:sz w:val="44"/>
<w:sz-cs w:val="44"/>
</w:rPr>
</w:pPr>
<w:r wsp:rsidR="002B098C">
<w:rPr>
<w:rFonts w:ascii="微软雅黑" w:fareast="微软雅黑" w:h-ansi="微软雅黑" w:hint="fareast"/>
<wx:font wx:val="微软雅黑"/>
<w:b/>
<w:sz w:val="44"/>
<w:sz-cs w:val="44"/>
</w:rPr>
<w:t>${name}简介</w:t>
</w:r>
</w:p>
<w:tbl>
<w:tblPr>
<w:tblW w:w="9072" w:type="dxa"/>
<w:jc w:val="center"/>
<w:tblBorders>
<w:top w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
<w:left w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
<w:bottom w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
<w:right w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
<w:insideH w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
<w:insideV w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
</w:tblBorders>
<w:tblLook w:val="04A0"/>
</w:tblPr>
<w:tblGrid>
<w:gridCol w:w="1855"/>
<w:gridCol w:w="3100"/>
<w:gridCol w:w="1849"/>
<w:gridCol w:w="2268"/>
</w:tblGrid>
<w:tr wsp:rsidR="00510709" wsp:rsidRPr="00510709" wsp:rsidTr="00510709">
<w:trPr>
<w:trHeight w:val="567"/>
<w:jc w:val="center"/>
</w:trPr>
<w:tc>
<w:tcPr>
<w:tcW w:w="1855" w:type="dxa"/>
<w:shd w:val="clear" w:color="auto" w:fill="auto"/>
<w:vAlign w:val="center"/>
</w:tcPr>
<w:p wsp:rsidR="00B62005" wsp:rsidRPr="00510709" wsp:rsidRDefault="00B62005" wsp:rsidP="00510709">
<w:pPr>
<w:jc w:val="center"/>
<w:rPr>
<w:rFonts w:ascii="宋体" w:fareast="宋体" w:h-ansi="宋体"/>
<wx:font wx:val="宋体"/>
<w:b/>
<w:sz w:val="24"/>
<w:sz-cs w:val="24"/>
</w:rPr>
</w:pPr>
<w:r wsp:rsidRPr="00510709">
<w:rPr>
<w:rFonts w:ascii="宋体" w:fareast="宋体" w:h-ansi="宋体" w:hint="fareast"/>
<wx:font wx:val="宋体"/>
<w:b/>
<w:sz w:val="24"/>
<w:sz-cs w:val="24"/>
</w:rPr>
<w:t>公司名称</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="7217" w:type="dxa"/>
<w:gridSpan w:val="3"/>
<w:shd w:val="clear" w:color="auto" w:fill="auto"/>
<w:vAlign w:val="center"/>
</w:tcPr>
<w:p wsp:rsidR="00B62005" wsp:rsidRPr="00510709" wsp:rsidRDefault="00335F0E" wsp:rsidP="00510709">
<w:pPr>
<w:jc w:val="center"/>
<w:rPr>
<w:rFonts w:ascii="宋体" w:fareast="宋体" w:h-ansi="宋体"/>
<wx:font wx:val="宋体"/>
<w:b/>
<w:sz w:val="24"/>
<w:sz-cs w:val="24"/>
</w:rPr>
</w:pPr>
<w:r wsp:rsidRPr="00510709">
<w:rPr>
<w:rFonts w:ascii="宋体" w:fareast="宋体" w:h-ansi="宋体"/>
<wx:font wx:val="宋体"/>
<w:b/>
<w:sz w:val="24"/>
<w:sz-cs w:val="24"/>
</w:rPr>
<w:t>${name}</w:t>
</w:r>
</w:p>
</w:tc>
</w:tr>
<w:tr wsp:rsidR="00510709" wsp:rsidRPr="00510709" wsp:rsidTr="00510709">
<w:trPr>
<w:trHeight w:val="567"/>
<w:jc w:val="center"/>
</w:trPr>
<w:tc>
<w:tcPr>
<w:tcW w:w="1855" w:type="dxa"/>
<w:shd w:val="clear" w:color="auto" w:fill="auto"/>
<w:vAlign w:val="center"/>
</w:tcPr>
<w:p wsp:rsidR="00B62005" wsp:rsidRPr="00510709" wsp:rsidRDefault="00B62005" wsp:rsidP="00510709">
<w:pPr>
<w:jc w:val="center"/>
<w:rPr>
<w:rFonts w:ascii="宋体" w:fareast="宋体" w:h-ansi="宋体" w:hint="fareast"/>
<wx:font wx:val="宋体"/>
<w:b/>
<w:sz w:val="24"/>
<w:sz-cs w:val="24"/>
</w:rPr>
</w:pPr>
<w:r wsp:rsidRPr="00510709">
<w:rPr>
<w:rFonts w:ascii="宋体" w:fareast="宋体" w:h-ansi="宋体" w:hint="fareast"/>
<wx:font wx:val="宋体"/>
<w:b/>
<w:sz w:val="24"/>
<w:sz-cs w:val="24"/>
</w:rPr>
<w:t>成立时间</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="3100" w:type="dxa"/>
<w:shd w:val="clear" w:color="auto" w:fill="auto"/>
<w:vAlign w:val="center"/>
</w:tcPr>
<w:p wsp:rsidR="00B62005" wsp:rsidRPr="00510709" wsp:rsidRDefault="00335F0E" wsp:rsidP="00510709">
<w:pPr>
<w:jc w:val="center"/>
<w:rPr>
<w:rFonts w:ascii="微软雅黑" w:fareast="微软雅黑" w:h-ansi="微软雅黑"/>
<wx:font wx:val="微软雅黑"/>
<w:b/>
<w:sz w:val="24"/>
<w:sz-cs w:val="24"/>
</w:rPr>
</w:pPr>
<w:r wsp:rsidRPr="00510709">
<w:rPr>
<w:rFonts w:ascii="宋体" w:fareast="宋体" w:h-ansi="宋体"/>
<wx:font wx:val="宋体"/>
<w:b/>
<w:sz w:val="24"/>
<w:sz-cs w:val="24"/>
</w:rPr>
<w:t>${createTime}</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="1849" w:type="dxa"/>
<w:shd w:val="clear" w:color="auto" w:fill="auto"/>
<w:vAlign w:val="center"/>
</w:tcPr>
<w:p wsp:rsidR="00B62005" wsp:rsidRPr="00510709" wsp:rsidRDefault="00B62005" wsp:rsidP="00510709">
<w:pPr>
<w:jc w:val="center"/>
<w:rPr>
<w:rFonts w:ascii="宋体" w:fareast="宋体" w:h-ansi="宋体" w:hint="fareast"/>
<wx:font wx:val="宋体"/>
<w:b/>
<w:sz w:val="24"/>
<w:sz-cs w:val="24"/>
</w:rPr>
</w:pPr>
<w:r wsp:rsidRPr="00510709">
<w:rPr>
<w:rFonts w:ascii="宋体" w:fareast="宋体" w:h-ansi="宋体" w:hint="fareast"/>
<wx:font wx:val="宋体"/>
<w:b/>
<w:sz w:val="24"/>
<w:sz-cs w:val="24"/>
</w:rPr>
<w:t>创始人</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="2268" w:type="dxa"/>
<w:shd w:val="clear" w:color="auto" w:fill="auto"/>
<w:vAlign w:val="center"/>
</w:tcPr>
<w:p wsp:rsidR="00B62005" wsp:rsidRPr="00510709" wsp:rsidRDefault="00335F0E" wsp:rsidP="00510709">
<w:pPr>
<w:jc w:val="center"/>
<w:rPr>
<w:rFonts w:ascii="宋体" w:fareast="宋体" w:h-ansi="宋体"/>
<wx:font wx:val="宋体"/>
<w:b/>
<w:sz w:val="24"/>
<w:sz-cs w:val="24"/>
</w:rPr>
</w:pPr>
<w:r wsp:rsidRPr="00510709">
<w:rPr>
<w:rFonts w:ascii="宋体" w:fareast="宋体" w:h-ansi="宋体"/>
<wx:font wx:val="宋体"/>
<w:b/>
<w:sz w:val="24"/>
<w:sz-cs w:val="24"/>
</w:rPr>
<w:t>${createUser}</w:t>
</w:r>
</w:p>
</w:tc>
</w:tr>
<w:tr wsp:rsidR="00510709" wsp:rsidRPr="00510709" wsp:rsidTr="00510709">
<w:trPr>
<w:trHeight w:val="567"/>
<w:jc w:val="center"/>
</w:trPr>
<w:tc>
<w:tcPr>
<w:tcW w:w="1855" w:type="dxa"/>
<w:shd w:val="clear" w:color="auto" w:fill="auto"/>
<w:vAlign w:val="center"/>
</w:tcPr>
<w:p wsp:rsidR="00B62005" wsp:rsidRPr="00510709" wsp:rsidRDefault="00B62005" wsp:rsidP="00510709">
<w:pPr>
<w:jc w:val="center"/>
<w:rPr>
<w:rFonts w:ascii="宋体" w:fareast="宋体" w:h-ansi="宋体" w:hint="fareast"/>
<wx:font wx:val="宋体"/>
<w:b/>
<w:sz w:val="24"/>
<w:sz-cs w:val="24"/>
</w:rPr>
</w:pPr>
<w:r wsp:rsidRPr="00510709">
<w:rPr>
<w:rFonts w:ascii="宋体" w:fareast="宋体" w:h-ansi="宋体" w:hint="fareast"/>
<wx:font wx:val="宋体"/>
<w:b/>
<w:sz w:val="24"/>
<w:sz-cs w:val="24"/>
</w:rPr>
<w:t>公司地址</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="7217" w:type="dxa"/>
<w:gridSpan w:val="3"/>
<w:shd w:val="clear" w:color="auto" w:fill="auto"/>
<w:vAlign w:val="center"/>
</w:tcPr>
<w:p wsp:rsidR="00B62005" wsp:rsidRPr="00510709" wsp:rsidRDefault="00335F0E" wsp:rsidP="00510709">
<w:pPr>
<w:jc w:val="center"/>
<w:rPr>
<w:rFonts w:ascii="微软雅黑" w:fareast="微软雅黑" w:h-ansi="微软雅黑"/>
<wx:font wx:val="微软雅黑"/>
<w:b/>
<w:sz w:val="24"/>
<w:sz-cs w:val="24"/>
</w:rPr>
</w:pPr>
<w:r wsp:rsidRPr="00510709">
<w:rPr>
<w:rFonts w:ascii="宋体" w:fareast="宋体" w:h-ansi="宋体"/>
<wx:font wx:val="宋体"/>
<w:b/>
<w:sz w:val="24"/>
<w:sz-cs w:val="24"/>
</w:rPr>
<w:t>${dist}</w:t>
</w:r>
</w:p>
</w:tc>
</w:tr>
<w:tr wsp:rsidR="00510709" wsp:rsidRPr="00510709" wsp:rsidTr="00510709">
<w:trPr>
<w:trHeight w:val="567"/>
<w:jc w:val="center"/>
</w:trPr>
<w:tc>
<w:tcPr>
<w:tcW w:w="1855" w:type="dxa"/>
<w:shd w:val="clear" w:color="auto" w:fill="auto"/>
<w:vAlign w:val="center"/>
</w:tcPr>
<w:p wsp:rsidR="00B62005" wsp:rsidRPr="00510709" wsp:rsidRDefault="00B62005" wsp:rsidP="00510709">
<w:pPr>
<w:jc w:val="center"/>
<w:rPr>
<w:rFonts w:ascii="宋体" w:fareast="宋体" w:h-ansi="宋体"/>
<wx:font wx:val="宋体"/>
<w:b/>
<w:sz w:val="24"/>
<w:sz-cs w:val="24"/>
</w:rPr>
</w:pPr>
<w:r wsp:rsidRPr="00510709">
<w:rPr>
<w:rFonts w:ascii="宋体" w:fareast="宋体" w:h-ansi="宋体" w:hint="fareast"/>
<wx:font wx:val="宋体"/>
<w:b/>
<w:sz w:val="24"/>
<w:sz-cs w:val="24"/>
</w:rPr>
<w:t>经营范围</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="7217" w:type="dxa"/>
<w:gridSpan w:val="3"/>
<w:shd w:val="clear" w:color="auto" w:fill="auto"/>
<w:vAlign w:val="center"/>
</w:tcPr>
<w:p wsp:rsidR="00B62005" wsp:rsidRPr="00510709" wsp:rsidRDefault="00335F0E" wsp:rsidP="00510709">
<w:pPr>
<w:jc w:val="center"/>
<w:rPr>
<w:rFonts w:ascii="微软雅黑" w:fareast="微软雅黑" w:h-ansi="微软雅黑"/>
<wx:font wx:val="微软雅黑"/>
<w:b/>
<w:sz w:val="24"/>
<w:sz-cs w:val="24"/>
</w:rPr>
</w:pPr>
<w:r wsp:rsidRPr="00510709">
<w:rPr>
<w:rFonts w:ascii="宋体" w:fareast="宋体" w:h-ansi="宋体"/>
<wx:font wx:val="宋体"/>
<w:b/>
<w:sz w:val="24"/>
<w:sz-cs w:val="24"/>
</w:rPr>
<w:t>${range}</w:t>
</w:r>
</w:p>
</w:tc>
</w:tr>
<w:tr wsp:rsidR="00510709" wsp:rsidRPr="00510709" wsp:rsidTr="00510709">
<w:trPr>
<w:trHeight w:val="567"/>
<w:jc w:val="center"/>
</w:trPr>
<w:tc>
<w:tcPr>
<w:tcW w:w="1855" w:type="dxa"/>
<w:shd w:val="clear" w:color="auto" w:fill="auto"/>
<w:vAlign w:val="center"/>
</w:tcPr>
<w:p wsp:rsidR="00B62005" wsp:rsidRPr="00510709" wsp:rsidRDefault="00B62005" wsp:rsidP="00510709">
<w:pPr>
<w:jc w:val="center"/>
<w:rPr>
<w:rFonts w:ascii="宋体" w:fareast="宋体" w:h-ansi="宋体" w:hint="fareast"/>
<wx:font wx:val="宋体"/>
<w:b/>
<w:sz w:val="24"/>
<w:sz-cs w:val="24"/>
</w:rPr>
</w:pPr>
<w:r wsp:rsidRPr="00510709">
<w:rPr>
<w:rFonts w:ascii="宋体" w:fareast="宋体" w:h-ansi="宋体" w:hint="fareast"/>
<wx:font wx:val="宋体"/>
<w:b/>
<w:sz w:val="24"/>
<w:sz-cs w:val="24"/>
</w:rPr>
<w:t>网址</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="7217" w:type="dxa"/>
<w:gridSpan w:val="3"/>
<w:shd w:val="clear" w:color="auto" w:fill="auto"/>
<w:vAlign w:val="center"/>
</w:tcPr>
<w:p wsp:rsidR="00B62005" wsp:rsidRPr="00510709" wsp:rsidRDefault="00335F0E" wsp:rsidP="00510709">
<w:pPr>
<w:jc w:val="center"/>
<w:rPr>
<w:rFonts w:ascii="微软雅黑" w:fareast="微软雅黑" w:h-ansi="微软雅黑"/>
<wx:font wx:val="微软雅黑"/>
<w:b/>
<w:sz w:val="24"/>
<w:sz-cs w:val="24"/>
</w:rPr>
</w:pPr>
<w:r wsp:rsidRPr="00510709">
<w:rPr>
<w:rFonts w:ascii="宋体" w:fareast="宋体" w:h-ansi="宋体"/>
<wx:font wx:val="宋体"/>
<w:b/>
<w:sz w:val="24"/>
<w:sz-cs w:val="24"/>
</w:rPr>
<w:t>${webUrl}</w:t>
</w:r>
</w:p>
</w:tc>
</w:tr>
<w:tr wsp:rsidR="00510709" wsp:rsidRPr="00510709" wsp:rsidTr="00510709">
<w:trPr>
<w:trHeight w:val="567"/>
<w:jc w:val="center"/>
</w:trPr>
<w:tc>
<w:tcPr>
<w:tcW w:w="1855" w:type="dxa"/>
<w:shd w:val="clear" w:color="auto" w:fill="auto"/>
<w:vAlign w:val="center"/>
</w:tcPr>
<w:p wsp:rsidR="00B62005" wsp:rsidRPr="00510709" wsp:rsidRDefault="00B62005" wsp:rsidP="00510709">
<w:pPr>
<w:jc w:val="center"/>
<w:rPr>
<w:rFonts w:ascii="宋体" w:fareast="宋体" w:h-ansi="宋体"/>
<wx:font wx:val="宋体"/>
<w:b/>
<w:sz w:val="24"/>
<w:sz-cs w:val="24"/>
</w:rPr>
</w:pPr>
<w:r wsp:rsidRPr="00510709">
<w:rPr>
<w:rFonts w:ascii="宋体" w:fareast="宋体" w:h-ansi="宋体" w:hint="fareast"/>
<wx:font wx:val="宋体"/>
<w:b/>
<w:sz w:val="24"/>
<w:sz-cs w:val="24"/>
</w:rPr>
<w:t>简介</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="7217" w:type="dxa"/>
<w:gridSpan w:val="3"/>
<w:shd w:val="clear" w:color="auto" w:fill="auto"/>
<w:vAlign w:val="center"/>
</w:tcPr>
<w:p wsp:rsidR="00B62005" wsp:rsidRPr="00510709" wsp:rsidRDefault="00335F0E" wsp:rsidP="00510709">
<w:pPr>
<w:jc w:val="center"/>
<w:rPr>
<w:rFonts w:ascii="微软雅黑" w:fareast="微软雅黑" w:h-ansi="微软雅黑"/>
<wx:font wx:val="微软雅黑"/>
<w:b/>
<w:sz w:val="24"/>
<w:sz-cs w:val="24"/>
</w:rPr>
</w:pPr>
<w:r wsp:rsidRPr="00510709">
<w:rPr>
<w:rFonts w:ascii="宋体" w:fareast="宋体" w:h-ansi="宋体"/>
<wx:font wx:val="宋体"/>
<w:b/>
<w:sz w:val="24"/>
<w:sz-cs w:val="24"/>
</w:rPr>
<w:t>${about}</w:t>
</w:r>
</w:p>
</w:tc>
</w:tr>
<w:tr wsp:rsidR="00335F0E" wsp:rsidRPr="00510709" wsp:rsidTr="00510709">
<w:trPr>
<w:trHeight w:val="567"/>
<w:jc w:val="center"/>
</w:trPr>
<w:tc>
<w:tcPr>
<w:tcW w:w="1855" w:type="dxa"/>
<w:shd w:val="clear" w:color="auto" w:fill="auto"/>
<w:vAlign w:val="center"/>
</w:tcPr>
<w:p wsp:rsidR="00335F0E" wsp:rsidRPr="00510709" wsp:rsidRDefault="00335F0E" wsp:rsidP="00510709">
<w:pPr>
<w:jc w:val="center"/>
<w:rPr>
<w:rFonts w:ascii="宋体" w:fareast="宋体" w:h-ansi="宋体"/>
<wx:font wx:val="宋体"/>
<w:b/>
<w:sz w:val="24"/>
<w:sz-cs w:val="24"/>
</w:rPr>
</w:pPr>
<w:r wsp:rsidRPr="00510709">
<w:rPr>
<w:rFonts w:ascii="宋体" w:fareast="宋体" w:h-ansi="宋体" w:hint="fareast"/>
<wx:font wx:val="宋体"/>
<w:b/>
<w:sz w:val="24"/>
<w:sz-cs w:val="24"/>
</w:rPr>
<w:t>介绍图片</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="7217" w:type="dxa"/>
<w:gridSpan w:val="3"/>
<w:shd w:val="clear" w:color="auto" w:fill="auto"/>
<w:vAlign w:val="center"/>
</w:tcPr>
<#if image?exists>
<#list image as guo>
<w:p wsp:rsidR="00335F0E" wsp:rsidRPr="00492EB2" wsp:rsidRDefault="00492EB2" wsp:rsidP="00492EB2">
<w:pPr>
<w:jc w:val="center"/>
<w:rPr>
<w:rFonts w:ascii="微软雅黑" w:fareast="微软雅黑" w:h-ansi="微软雅黑"/>
<wx:font wx:val="微软雅黑"/>
<w:b/>
<w:sz w:val="24"/>
<w:sz-cs w:val="24"/>
</w:rPr>
</w:pPr>
<w:r wsp:rsidRPr="00492EB2">
<w:rPr>
<w:rFonts w:ascii="微软雅黑" w:fareast="微软雅黑" w:h-ansi="微软雅黑"/>
<wx:font wx:val="微软雅黑"/>
<w:b/>
<w:noProof/>
<w:sz w:val="24"/>
<w:sz-cs w:val="24"/>
</w:rPr>
<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://0"+guo_index+3+"00000"+guo_index+1+".png"}" xml:space="preserve">
${guo.image}</w:binData>
<v:shape id="图片 3" o:spid="_x0000_i1025" type="#_x0000_t75" style="width:250pt;height:130pt;visibility:visible;mso-wrap-style:square"><v:imagedata src="${"wordml://0"+guo_index+3+"00000"+guo_index+1+".png"}" o:title=""/></v:shape>
</w:pict>
</w:r>
</w:p>
</#list>
</#if>
</w:tc>
</w:tr>
</w:tbl>
<w:p wsp:rsidR="00B62005" wsp:rsidRPr="00B62005" wsp:rsidRDefault="00B62005" wsp:rsidP="00B62005">
<w:pPr>
<w:jc w:val="center"/>
<w:rPr>
<w:rFonts w:ascii="微软雅黑" w:fareast="微软雅黑" w:h-ansi="微软雅黑"/>
<wx:font wx:val="微软雅黑"/>
<w:b/>
<w:sz w:val="44"/>
<w:sz-cs w:val="44"/>
</w:rPr>
</w:pPr>
</w:p>
<w:sectPr wsp:rsidR="00B62005" wsp:rsidRPr="00B62005">
<w:pgSz w:w="11906" w:h="16838"/>
<w:pgMar w:top="1440" w:right="1800" w:bottom="1440" w:left="1800" w:header="851" w:footer="992" w:gutter="0"/>
<w:cols w:space="425"/>
<w:docGrid w:type="lines" w:line-pitch="312"/>
</w:sectPr>
</wx:sect>
</w:body>
</w:wordDocument>
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://lebron.blog.csdn.net/article/details/124935329
内容来源于网络,如有侵权,请联系作者删除!