SpringBoot+FreeMarker+ECharts导出图表文件(pdf/world/zip)

本文主要解决了导出文件中出现的以下问题:

  1. 导出PDF文件不能显示中文的问题
  2. 导出的PDF图片不能正常显示的问题
  3. 需要导出World带图片的解决方案
  4. 项目部署Linux后FreeMarker的配置路径无法读取的问题

步骤

  • maven依赖导入

xhtmlrenderer包主要是解决PDF图片显示的问题

		<!-- pdf -->
		<dependency>
			<groupId>com.itextpdf</groupId>
			<artifactId>itextpdf</artifactId>
			<version>5.5.13</version>
		</dependency>
		<dependency>
			<groupId>com.itextpdf</groupId>
			<artifactId>itext-asian</artifactId>
			<version>5.2.0</version>
		</dependency>
		<dependency>
			<groupId>com.itextpdf.tool</groupId>
			<artifactId>xmlworker</artifactId>
			<version>5.5.11</version>
		</dependency>
		<dependency>
			<groupId>org.xhtmlrenderer</groupId>
			<artifactId>core-renderer</artifactId>
			<version>R8</version>
		</dependency>

        <!-- freemarker -->
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.19</version>
        </dependency>
  • 工具类创建

FreeMarkerUtil.java通用导出类

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.tool.xml.XMLWorkerHelper;
import freemarker.template.Configuration;
import freemarker.template.Template;
import org.apache.commons.lang3.StringUtils;
import org.drools.core.io.impl.ClassPathResource;
import org.springframework.util.ResourceUtils;
import org.xhtmlrenderer.pdf.ITextFontResolver;
import org.xhtmlrenderer.pdf.ITextRenderer;

import java.io.*;
import java.nio.charset.Charset;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

/**
 * freeMarker工具类
 *
 * @author leezk
 * @version 1.0
 * @since 2021/2/2 18:26
 **/
public class FreeMarkerUtil {

    public static String FREEMARKER_PATH = "html";

    /**
     * 获取填充的模板
     *
     * @param data
     * @param htmlTmp
     * @return
     */
    public static String freeMarkerRender(Map<String, Object> data, String htmlTmp, Class clazz) {
        Writer out = new StringWriter();
        String templateName = FREEMARKER_PATH + File.separator + htmlTmp;
        try {
            // 获取模板,并设置编码方式
            Configuration freemarkerCfg = new Configuration();
            freemarkerCfg.setClassForTemplateLoading(clazz, File.separator);
            Template template = freemarkerCfg.getTemplate(templateName);
            template.setEncoding("UTF-8");
            // 合并数据模型与模板
            template.process(data, out);
            out.flush();
            return out.toString();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                out.close();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
        return null;
    }

    /**
     * 导出pdf
     *
     * @param htmlStr
     * @param os
     * @return
     */
    public static String exportpdf(String htmlStr, OutputStream os) {
        try {
            if (StringUtils.isBlank(htmlStr)) {
                return null;
            }
            //-----版本2.0.8
            ITextRenderer renderer = new ITextRenderer();
            // 如果携带图片则加上以下两行代码,将图片标签转换为Itext自己的图片对象,Base64ImgReplacedElementFactory为图片处理类
            renderer.getSharedContext().setReplacedElementFactory(new B64ImgReplacedElementFactory());
            renderer.getSharedContext().getTextRenderer().setSmoothingThreshold(1);
            renderer.setDocumentFromString(htmlStr);
            ITextFontResolver fontResolver = renderer.getFontResolver();
            // 解决中文支持问题,参数为字体的路径,html页面也必须引入字体
            fontResolver.addFont(FREEMARKER_PATH + File.separator + "simsun.ttc", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
            renderer.layout();
            renderer.createPDF(os);
            os.close();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        return null;
    }

    /**
     * 导出world
     *
     * @param dataMap
     * @param templateName
     * @param os
     */
    public static void exportWord(Map dataMap, String templateName, OutputStream os, Class clazz) {
        try {
            //获取模板
            Configuration freemarkerCfg = new Configuration();
            freemarkerCfg.setClassForTemplateLoading(clazz, File.separator);
            String templateName2 = FREEMARKER_PATH + File.separator + templateName;
            Template template = freemarkerCfg.getTemplate(templateName2);
            //将模板和数据模型合并生成文件
            Writer out = new BufferedWriter(new OutputStreamWriter(os));
            //生成文件
            template.process(dataMap, out);
            //关闭流
            out.flush();
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    /**
     * 简单压缩文件
     *
     * @param filePaths
     * @param zos
     * @param dataZip
     * @param htmlTemp
     * @param htmlName
     * @param clazz
     */
    public static void exportZipFile(List<String> filePaths, ZipOutputStream zos, Map<String, Object> dataZip, String htmlTemp, String htmlName, Class clazz) {
        byte[] buffer = new byte[4096];
        try {
            for (String filePath : filePaths) {
                if (filePath.lastIndexOf(htmlTemp) >= 0) {
                    String str = FreeMarkerUtil.freeMarkerRender(dataZip, htmlTemp, clazz);
                    zos.putNextEntry(new ZipEntry(htmlName));
                    zos.write(str.getBytes("utf-8"), 0, str.getBytes().length);
                    zos.closeEntry();
                } else {
                    String resourceName = FREEMARKER_PATH + File.separator + filePath;
                    ClassPathResource classPathResource = new ClassPathResource(resourceName);
                    InputStream inputStream = classPathResource.getInputStream();
                    BufferedInputStream bis = new BufferedInputStream(inputStream);
                    zos.putNextEntry(new ZipEntry(filePath));
                    int size = 0;
                    while ((size = bis.read(buffer)) > 0) {
                        zos.write(buffer, 0, size);
                    }
                    zos.closeEntry();
                    bis.close();
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (null != zos) {
                try {
                    zos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

B64ImgReplacedElementFactory.java 图片替换处理类

import java.io.IOException ;
import org.w3c.dom.Element ;
import org.xhtmlrenderer.extend.FSImage ;
import org.xhtmlrenderer.extend.ReplacedElement ;
import org.xhtmlrenderer.extend.ReplacedElementFactory ;
import org.xhtmlrenderer.extend.UserAgentCallback ;
import org.xhtmlrenderer.layout.LayoutContext ;
import org.xhtmlrenderer.pdf.ITextFSImage ;
import org.xhtmlrenderer.pdf.ITextImageElement ;
import org.xhtmlrenderer.render.BlockBox ;
import org.xhtmlrenderer.simple.extend.FormSubmissionListener ;
import com.lowagie.text.BadElementException ;
import com.lowagie.text.Image ;
import com.lowagie.text.pdf.codec.Base64 ;

/**
 * base64解码
 *
 * @author leezk
 * @version 1.0
 * @since 2021/2/4 11:00
 **/
public class B64ImgReplacedElementFactory implements ReplacedElementFactory {

    @Override
    public ReplacedElement createReplacedElement(LayoutContext layoutContext, BlockBox blockBox, UserAgentCallback userAgentCallback, int cssWidth, int cssHeight) {
        Element e = blockBox.getElement();
        if (e == null) {
            return null;
        }
        String nodeName = e.getNodeName();
        // 找到img标签
        if (nodeName.equals("img")) {
            String attribute = e.getAttribute("src");
            FSImage fsImage;
            try {
                // 生成itext图像
                fsImage = buildImage(attribute, userAgentCallback);
            } catch (BadElementException e1) {
                fsImage = null;
            } catch (IOException e1) {
                fsImage = null;
            }
            if (fsImage != null) {
                // 对图像进行缩放
                if (cssWidth != -1 || cssHeight != -1) {
                    fsImage.scale(cssWidth, cssHeight);
                }
                return new ITextImageElement(fsImage);
            }
        }
        return null;
    }

    /**
     * 将base64编码解码并生成itext图像
     *
     * @param srcAttr 属性
     * @param uac 回调
     * @return FSImage
     * @throws IOException io异常
     * @throws BadElementException BadElementException
     */
    protected FSImage buildImage(String srcAttr, UserAgentCallback uac) throws IOException,
            BadElementException {
        FSImage fsImage;
        if (srcAttr.startsWith("data:image/")) {
            String b64encoded = srcAttr.substring(srcAttr.indexOf("base64,") + "base64,".length(),
                    srcAttr.length());
            // 解码
            byte[] decodedBytes = Base64.decode(b64encoded);

            fsImage = new ITextFSImage(Image.getInstance(decodedBytes));
        } else {
            fsImage = uac.getImageResource(srcAttr).getImage();
        }
        return fsImage;
    }

    @Override
    public void reset() {
    }

    @Override
    public void remove(Element element) {
    }

    @Override
    public void setFormSubmissionListener(FormSubmissionListener formSubmissionListener) {
    }
}

  • ftl文件创建

相关文件位置在resources/html目录下 ;例如:resources/html/pdf.ftl

pdf.ftl PDF文件生成模板

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8"/>
    <title>pdf</title>
    <style>
        table thead tr th,
        table tbody tr td {
            padding: 5px 10px;
            border: 1px solid #eee;
        }
        body{
            /* 必须设置此字体以解决中文显示的问题 */
            font-family:SimSun;
        }
    </style>
</head>
<body style="margin:0;padding:0;">
	<div>${title}</div>
    <img src="${base64}">
</html>

world.ftl world文件生成模板

<?xml version="1.0" encoding="utf-8"?>
<?mso-application progid="Word.Document"?>

<pkg:package xmlns:pkg="http://schemas.microsoft.com/office/2006/xmlPackage">
  <pkg:part pkg:name="/_rels/.rels" pkg:contentType="application/vnd.openxmlformats-package.relationships+xml" pkg:padding="512">
    <pkg:xmlData>
      <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
        <Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/>
        <Relationship Id="rId2" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/>
        <Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="word/document.xml"/>
        <Relationship Id="rId4" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties" Target="docProps/custom.xml"/>
      </Relationships>
    </pkg:xmlData>
  </pkg:part>
  <pkg:part pkg:name="/word/document.xml" pkg:contentType="application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml">
    <pkg:xmlData>
      <w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:wpc="http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas" xmlns:cx="http://schemas.microsoft.com/office/drawing/2014/chartex" xmlns:cx1="http://schemas.microsoft.com/office/drawing/2015/9/8/chartex" xmlns:cx2="http://schemas.microsoft.com/office/drawing/2015/10/21/chartex" xmlns:cx3="http://schemas.microsoft.com/office/drawing/2016/5/9/chartex" xmlns:cx4="http://schemas.microsoft.com/office/drawing/2016/5/10/chartex" xmlns:cx5="http://schemas.microsoft.com/office/drawing/2016/5/11/chartex" xmlns:cx6="http://schemas.microsoft.com/office/drawing/2016/5/12/chartex" xmlns:cx7="http://schemas.microsoft.com/office/drawing/2016/5/13/chartex" xmlns:cx8="http://schemas.microsoft.com/office/drawing/2016/5/14/chartex" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:aink="http://schemas.microsoft.com/office/drawing/2016/ink" xmlns:am3d="http://schemas.microsoft.com/office/drawing/2017/model3d" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:w15="http://schemas.microsoft.com/office/word/2012/wordml" xmlns:w16cex="http://schemas.microsoft.com/office/word/2018/wordml/cex" xmlns:w16cid="http://schemas.microsoft.com/office/word/2016/wordml/cid" xmlns:w16="http://schemas.microsoft.com/office/word/2018/wordml" xmlns:w16se="http://schemas.microsoft.com/office/word/2015/wordml/symex" xmlns:wpg="http://schemas.microsoft.com/office/word/2010/wordprocessingGroup" xmlns:wpi="http://schemas.microsoft.com/office/word/2010/wordprocessingInk" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:wps="http://schemas.microsoft.com/office/word/2010/wordprocessingShape" mc:Ignorable="w14 w15 w16se w16cid w16 w16cex wp14">
        <w:body>
          <w:p w14:paraId="133F391E" w14:textId="78B6407D" w:rsidR="00DB5C5E" w:rsidRDefault="00925BE7" w:rsidP="00925BE7">
            <w:pPr>
              <w:jc w:val="center"/>
            </w:pPr>
            <w:r>
              <w:rPr>
                <w:rFonts w:hint="eastAsia"/>
              </w:rPr>
              <w:t>${title}</w:t>
            </w:r>
          </w:p>
          <w:p w14:paraId="02D4FEEA" w14:textId="0C111736" w:rsidR="00925BE7" w:rsidRDefault="00925BE7" w:rsidP="00925BE7">
            <w:pPr>
              <w:jc w:val="center"/>
              <w:rPr>
                <w:rFonts w:hint="eastAsia"/>
              </w:rPr>
            </w:pPr>
            <w:r>
              <w:rPr>
                <w:rFonts w:hint="eastAsia"/>
                <w:noProof/>
              </w:rPr>
              <w:drawing>
                <wp:inline distT="0" distB="0" distL="0" distR="0" wp14:anchorId="06B4177C" wp14:editId="381BA288">
                  <wp:extent cx="3810330" cy="2149026"/>
                  <wp:effectExtent l="0" t="0" r="0" b="3810"/>
                  <wp:docPr id="1" name="图片 1"/>
                  <wp:cNvGraphicFramePr>
                    <a:graphicFrameLocks xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" noChangeAspect="1"></a:graphicFrameLocks>
                  </wp:cNvGraphicFramePr>
                  <a:graphic xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main">
                    <a:graphicData uri="http://schemas.openxmlformats.org/drawingml/2006/picture">
                      <pic:pic xmlns:pic="http://schemas.openxmlformats.org/drawingml/2006/picture">
                        <pic:nvPicPr>
                          <pic:cNvPr id="1" name="图片 1"/>
                          <pic:cNvPicPr/>
                        </pic:nvPicPr>
                        <pic:blipFill>
                          <a:blip r:embed="rId4">
                            <a:extLst>
                              <a:ext uri="{28A0092B-C50C-407E-A947-70E740481C1C}">
                                <a14:useLocalDpi xmlns:a14="http://schemas.microsoft.com/office/drawing/2010/main" val="0"></a14:useLocalDpi>
                              </a:ext>
                            </a:extLst>
                          </a:blip>
                          <a:stretch>
                            <a:fillRect/>
                          </a:stretch>
                        </pic:blipFill>
                        <pic:spPr>
                          <a:xfrm>
                            <a:off x="0" y="0"/>
                            <a:ext cx="3810330" cy="2149026"/>
                          </a:xfrm>
                          <a:prstGeom prst="rect">
                            <a:avLst/>
                          </a:prstGeom>
                        </pic:spPr>
                      </pic:pic>
                    </a:graphicData>
                  </a:graphic>
                </wp:inline>
              </w:drawing>
            </w:r>
          </w:p>
          <w:sectPr w:rsidR="00925BE7">
            <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:linePitch="312"/>
          </w:sectPr>
        </w:body>
      </w:document>
    </pkg:xmlData>
  </pkg:part>
  <pkg:part pkg:name="/word/_rels/document.xml.rels" pkg:contentType="application/vnd.openxmlformats-package.relationships+xml" pkg:padding="256">
    <pkg:xmlData>
      <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
        <Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/webSettings" Target="webSettings.xml"/>
        <Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings" Target="settings.xml"/>
        <Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Target="styles.xml"/>
        <Relationship Id="rId6" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme" Target="theme/theme1.xml"/>
        <Relationship Id="rId5" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable" Target="fontTable.xml"/>
        <Relationship Id="rId4" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image" Target="media/image1.png"/>
      </Relationships>
    </pkg:xmlData>
  </pkg:part>
  <pkg:part pkg:name="/word/media/image1.png" pkg:contentType="image/png" pkg:compression="store">
    <pkg:binaryData>${base64}</pkg:binaryData>
  </pkg:part>
  <pkg:part pkg:name="/word/theme/theme1.xml" pkg:contentType="application/vnd.openxmlformats-officedocument.theme+xml">
    <pkg:xmlData>
      <a:theme xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" name="Office 主题​​">
        <a:themeElements>
          <a:clrScheme name="Office">
            <a:dk1>
              <a:sysClr val="windowText" lastClr="000000"/>
            </a:dk1>
            <a:lt1>
              <a:sysClr val="window" lastClr="FFFFFF"/>
            </a:lt1>
            <a:dk2>
              <a:srgbClr val="44546A"/>
            </a:dk2>
            <a:lt2>
              <a:srgbClr val="E7E6E6"/>
            </a:lt2>
            <a:accent1>
              <a:srgbClr val="4472C4"/>
            </a:accent1>
            <a:accent2>
              <a:srgbClr val="ED7D31"/>
            </a:accent2>
            <a:accent3>
              <a:srgbClr val="A5A5A5"/>
            </a:accent3>
            <a:accent4>
              <a:srgbClr val="FFC000"/>
            </a:accent4>
            <a:accent5>
              <a:srgbClr val="5B9BD5"/>
            </a:accent5>
            <a:accent6>
              <a:srgbClr val="70AD47"/>
            </a:accent6>
            <a:hlink>
              <a:srgbClr val="0563C1"/>
            </a:hlink>
            <a:folHlink>
              <a:srgbClr val="954F72"/>
            </a:folHlink>
          </a:clrScheme>
          <a:fontScheme name="Office">
            <a:majorFont>
              <a:latin typeface="等线 Light" panose="020F0302020204030204"/>
              <a:ea typeface=""/>
              <a:cs typeface=""/>
              <a:font script="Jpan" typeface="游ゴシック Light"/>
              <a:font script="Hang" typeface="맑은 고딕"/>
              <a:font script="Hans" typeface="等线 Light"/>
              <a:font script="Hant" typeface="新細明體"/>
              <a:font script="Arab" typeface="Times New Roman"/>
              <a:font script="Hebr" typeface="Times New Roman"/>
              <a:font script="Thai" typeface="Angsana New"/>
              <a:font script="Ethi" typeface="Nyala"/>
              <a:font script="Beng" typeface="Vrinda"/>
              <a:font script="Gujr" typeface="Shruti"/>
              <a:font script="Khmr" typeface="MoolBoran"/>
              <a:font script="Knda" typeface="Tunga"/>
              <a:font script="Guru" typeface="Raavi"/>
              <a:font script="Cans" typeface="Euphemia"/>
              <a:font script="Cher" typeface="Plantagenet Cherokee"/>
              <a:font script="Yiii" typeface="Microsoft Yi Baiti"/>
              <a:font script="Tibt" typeface="Microsoft Himalaya"/>
              <a:font script="Thaa" typeface="MV Boli"/>
              <a:font script="Deva" typeface="Mangal"/>
              <a:font script="Telu" typeface="Gautami"/>
              <a:font script="Taml" typeface="Latha"/>
              <a:font script="Syrc" typeface="Estrangelo Edessa"/>
              <a:font script="Orya" typeface="Kalinga"/>
              <a:font script="Mlym" typeface="Kartika"/>
              <a:font script="Laoo" typeface="DokChampa"/>
              <a:font script="Sinh" typeface="Iskoola Pota"/>
              <a:font script="Mong" typeface="Mongolian Baiti"/>
              <a:font script="Viet" typeface="Times New Roman"/>
              <a:font script="Uigh" typeface="Microsoft Uighur"/>
              <a:font script="Geor" typeface="Sylfaen"/>
              <a:font script="Armn" typeface="Arial"/>
              <a:font script="Bugi" typeface="Leelawadee UI"/>
              <a:font script="Bopo" typeface="Microsoft JhengHei"/>
              <a:font script="Java" typeface="Javanese Text"/>
              <a:font script="Lisu" typeface="Segoe UI"/>
              <a:font script="Mymr" typeface="Myanmar Text"/>
              <a:font script="Nkoo" typeface="Ebrima"/>
              <a:font script="Olck" typeface="Nirmala UI"/>
              <a:font script="Osma" typeface="Ebrima"/>
              <a:font script="Phag" typeface="Phagspa"/>
              <a:font script="Syrn" typeface="Estrangelo Edessa"/>
              <a:font script="Syrj" typeface="Estrangelo Edessa"/>
              <a:font script="Syre" typeface="Estrangelo Edessa"/>
              <a:font script="Sora" typeface="Nirmala UI"/>
              <a:font script="Tale" typeface="Microsoft Tai Le"/>
              <a:font script="Talu" typeface="Microsoft New Tai Lue"/>
              <a:font script="Tfng" typeface="Ebrima"/>
            </a:majorFont>
            <a:minorFont>
              <a:latin typeface="等线" panose="020F0502020204030204"/>
              <a:ea typeface=""/>
              <a:cs typeface=""/>
              <a:font script="Jpan" typeface="游明朝"/>
              <a:font script="Hang" typeface="맑은 고딕"/>
              <a:font script="Hans" typeface="等线"/>
              <a:font script="Hant" typeface="新細明體"/>
              <a:font script="Arab" typeface="Arial"/>
              <a:font script="Hebr" typeface="Arial"/>
              <a:font script="Thai" typeface="Cordia New"/>
              <a:font script="Ethi" typeface="Nyala"/>
              <a:font script="Beng" typeface="Vrinda"/>
              <a:font script="Gujr" typeface="Shruti"/>
              <a:font script="Khmr" typeface="DaunPenh"/>
              <a:font script="Knda" typeface="Tunga"/>
              <a:font script="Guru" typeface="Raavi"/>
              <a:font script="Cans" typeface="Euphemia"/>
              <a:font script="Cher" typeface="Plantagenet Cherokee"/>
              <a:font script="Yiii" typeface="Microsoft Yi Baiti"/>
              <a:font script="Tibt" typeface="Microsoft Himalaya"/>
              <a:font script="Thaa" typeface="MV Boli"/>
              <a:font script="Deva" typeface="Mangal"/>
              <a:font script="Telu" typeface="Gautami"/>
              <a:font script="Taml" typeface="Latha"/>
              <a:font script="Syrc" typeface="Estrangelo Edessa"/>
              <a:font script="Orya" typeface="Kalinga"/>
              <a:font script="Mlym" typeface="Kartika"/>
              <a:font script="Laoo" typeface="DokChampa"/>
              <a:font script="Sinh" typeface="Iskoola Pota"/>
              <a:font script="Mong" typeface="Mongolian Baiti"/>
              <a:font script="Viet" typeface="Arial"/>
              <a:font script="Uigh" typeface="Microsoft Uighur"/>
              <a:font script="Geor" typeface="Sylfaen"/>
              <a:font script="Armn" typeface="Arial"/>
              <a:font script="Bugi" typeface="Leelawadee UI"/>
              <a:font script="Bopo" typeface="Microsoft JhengHei"/>
              <a:font script="Java" typeface="Javanese Text"/>
              <a:font script="Lisu" typeface="Segoe UI"/>
              <a:font script="Mymr" typeface="Myanmar Text"/>
              <a:font script="Nkoo" typeface="Ebrima"/>
              <a:font script="Olck" typeface="Nirmala UI"/>
              <a:font script="Osma" typeface="Ebrima"/>
              <a:font script="Phag" typeface="Phagspa"/>
              <a:font script="Syrn" typeface="Estrangelo Edessa"/>
              <a:font script="Syrj" typeface="Estrangelo Edessa"/>
              <a:font script="Syre" typeface="Estrangelo Edessa"/>
              <a:font script="Sora" typeface="Nirmala UI"/>
              <a:font script="Tale" typeface="Microsoft Tai Le"/>
              <a:font script="Talu" typeface="Microsoft New Tai Lue"/>
              <a:font script="Tfng" typeface="Ebrima"/>
            </a:minorFont>
          </a:fontScheme>
          <a:fmtScheme name="Office">
            <a:fillStyleLst>
              <a:solidFill>
                <a:schemeClr val="phClr"/>
              </a:solidFill>
              <a:gradFill rotWithShape="1">
                <a:gsLst>
                  <a:gs pos="0">
                    <a:schemeClr val="phClr">
                      <a:lumMod val="110000"/>
                      <a:satMod val="105000"/>
                      <a:tint val="67000"/>
                    </a:schemeClr>
                  </a:gs>
                  <a:gs pos="50000">
                    <a:schemeClr val="phClr">
                      <a:lumMod val="105000"/>
                      <a:satMod val="103000"/>
                      <a:tint val="73000"/>
                    </a:schemeClr>
                  </a:gs>
                  <a:gs pos="100000">
                    <a:schemeClr val="phClr">
                      <a:lumMod val="105000"/>
                      <a:satMod val="109000"/>
                      <a:tint val="81000"/>
                    </a:schemeClr>
                  </a:gs>
                </a:gsLst>
                <a:lin ang="5400000" scaled="0"/>
              </a:gradFill>
              <a:gradFill rotWithShape="1">
                <a:gsLst>
                  <a:gs pos="0">
                    <a:schemeClr val="phClr">
                      <a:satMod val="103000"/>
                      <a:lumMod val="102000"/>
                      <a:tint val="94000"/>
                    </a:schemeClr>
                  </a:gs>
                  <a:gs pos="50000">
                    <a:schemeClr val="phClr">
                      <a:satMod val="110000"/>
                      <a:lumMod val="100000"/>
                      <a:shade val="100000"/>
                    </a:schemeClr>
                  </a:gs>
                  <a:gs pos="100000">
                    <a:schemeClr val="phClr">
                      <a:lumMod val="99000"/>
                      <a:satMod val="120000"/>
                      <a:shade val="78000"/>
                    </a:schemeClr>
                  </a:gs>
                </a:gsLst>
                <a:lin ang="5400000" scaled="0"/>
              </a:gradFill>
            </a:fillStyleLst>
            <a:lnStyleLst>
              <a:ln w="6350" cap="flat" cmpd="sng" algn="ctr">
                <a:solidFill>
                  <a:schemeClr val="phClr"/>
                </a:solidFill>
                <a:prstDash val="solid"/>
                <a:miter lim="800000"/>
              </a:ln>
              <a:ln w="12700" cap="flat" cmpd="sng" algn="ctr">
                <a:solidFill>
                  <a:schemeClr val="phClr"/>
                </a:solidFill>
                <a:prstDash val="solid"/>
                <a:miter lim="800000"/>
              </a:ln>
              <a:ln w="19050" cap="flat" cmpd="sng" algn="ctr">
                <a:solidFill>
                  <a:schemeClr val="phClr"/>
                </a:solidFill>
                <a:prstDash val="solid"/>
                <a:miter lim="800000"/>
              </a:ln>
            </a:lnStyleLst>
            <a:effectStyleLst>
              <a:effectStyle>
                <a:effectLst/>
              </a:effectStyle>
              <a:effectStyle>
                <a:effectLst/>
              </a:effectStyle>
              <a:effectStyle>
                <a:effectLst>
                  <a:outerShdw blurRad="57150" dist="19050" dir="5400000" algn="ctr" rotWithShape="0">
                    <a:srgbClr val="000000">
                      <a:alpha val="63000"/>
                    </a:srgbClr>
                  </a:outerShdw>
                </a:effectLst>
              </a:effectStyle>
            </a:effectStyleLst>
            <a:bgFillStyleLst>
              <a:solidFill>
                <a:schemeClr val="phClr"/>
              </a:solidFill>
              <a:solidFill>
                <a:schemeClr val="phClr">
                  <a:tint val="95000"/>
                  <a:satMod val="170000"/>
                </a:schemeClr>
              </a:solidFill>
              <a:gradFill rotWithShape="1">
                <a:gsLst>
                  <a:gs pos="0">
                    <a:schemeClr val="phClr">
                      <a:tint val="93000"/>
                      <a:satMod val="150000"/>
                      <a:shade val="98000"/>
                      <a:lumMod val="102000"/>
                    </a:schemeClr>
                  </a:gs>
                  <a:gs pos="50000">
                    <a:schemeClr val="phClr">
                      <a:tint val="98000"/>
                      <a:satMod val="130000"/>
                      <a:shade val="90000"/>
                      <a:lumMod val="103000"/>
                    </a:schemeClr>
                  </a:gs>
                  <a:gs pos="100000">
                    <a:schemeClr val="phClr">
                      <a:shade val="63000"/>
                      <a:satMod val="120000"/>
                    </a:schemeClr>
                  </a:gs>
                </a:gsLst>
                <a:lin ang="5400000" scaled="0"/>
              </a:gradFill>
            </a:bgFillStyleLst>
          </a:fmtScheme>
        </a:themeElements>
        <a:objectDefaults/>
        <a:extraClrSchemeLst/>
        <a:extLst>
          <a:ext uri="{05A4C25C-085E-4340-85A3-A5531E510DB2}">
            <thm15:themeFamily xmlns:thm15="http://schemas.microsoft.com/office/thememl/2012/main" name="Office Theme" id="{62F939B6-93AF-4DB8-9C6B-D6C7DFDC589F}" vid="{4A3C46E8-61CC-4603-A589-7422A47A8E4A}"></thm15:themeFamily>
          </a:ext>
        </a:extLst>
      </a:theme>
    </pkg:xmlData>
  </pkg:part>
  <pkg:part pkg:name="/word/settings.xml" pkg:contentType="application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml">
    <pkg:xmlData>
      <w:settings xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:w15="http://schemas.microsoft.com/office/word/2012/wordml" xmlns:w16cex="http://schemas.microsoft.com/office/word/2018/wordml/cex" xmlns:w16cid="http://schemas.microsoft.com/office/word/2016/wordml/cid" xmlns:w16="http://schemas.microsoft.com/office/word/2018/wordml" xmlns:w16se="http://schemas.microsoft.com/office/word/2015/wordml/symex" xmlns:sl="http://schemas.openxmlformats.org/schemaLibrary/2006/main" mc:Ignorable="w14 w15 w16se w16cid w16 w16cex">
        <w:zoom w:percent="100"/>
        <w:bordersDoNotSurroundHeader/>
        <w:bordersDoNotSurroundFooter/>
        <w:proofState w:spelling="clean" w:grammar="clean"/>
        <w:defaultTabStop w:val="420"/>
        <w:drawingGridVerticalSpacing w:val="156"/>
        <w:displayHorizontalDrawingGridEvery w:val="0"/>
        <w:displayVerticalDrawingGridEvery w:val="2"/>
        <w:characterSpacingControl w:val="compressPunctuation"/>
        <w:compat>
          <w:spaceForUL/>
          <w:balanceSingleByteDoubleByteWidth/>
          <w:doNotLeaveBackslashAlone/>
          <w:ulTrailSpace/>
          <w:doNotExpandShiftReturn/>
          <w:adjustLineHeightInTable/>
          <w:useFELayout/>
          <w:compatSetting w:name="compatibilityMode" w:uri="http://schemas.microsoft.com/office/word" w:val="15"/>
          <w:compatSetting w:name="overrideTableStyleFontSizeAndJustification" w:uri="http://schemas.microsoft.com/office/word" w:val="1"/>
          <w:compatSetting w:name="enableOpenTypeFeatures" w:uri="http://schemas.microsoft.com/office/word" w:val="1"/>
          <w:compatSetting w:name="doNotFlipMirrorIndents" w:uri="http://schemas.microsoft.com/office/word" w:val="1"/>
          <w:compatSetting w:name="differentiateMultirowTableHeaders" w:uri="http://schemas.microsoft.com/office/word" w:val="1"/>
          <w:compatSetting w:name="useWord2013TrackBottomHyphenation" w:uri="http://schemas.microsoft.com/office/word" w:val="0"/>
        </w:compat>
        <w:rsids>
          <w:rsidRoot w:val="00925BE7"/>
          <w:rsid w:val="00925BE7"/>
          <w:rsid w:val="00DB5C5E"/>
        </w:rsids>
        <m:mathPr>
          <m:mathFont m:val="Cambria Math"/>
          <m:brkBin m:val="before"/>
          <m:brkBinSub m:val="--"/>
          <m:smallFrac m:val="0"/>
          <m:dispDef/>
          <m:lMargin m:val="0"/>
          <m:rMargin m:val="0"/>
          <m:defJc m:val="centerGroup"/>
          <m:wrapIndent m:val="1440"/>
          <m:intLim m:val="subSup"/>
          <m:naryLim m:val="undOvr"/>
        </m:mathPr>
        <w:themeFontLang w:val="en-US" w:eastAsia="zh-CN"/>
        <w:clrSchemeMapping w:bg1="light1" w:t1="dark1" w:bg2="light2" w:t2="dark2" w:accent1="accent1" w:accent2="accent2" w:accent3="accent3" w:accent4="accent4" w:accent5="accent5" w:accent6="accent6" w:hyperlink="hyperlink" w:followedHyperlink="followedHyperlink"/>
        <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:decimalSymbol w:val="."/>
        <w:listSeparator w:val=","/>
        <w14:docId w14:val="5039CBA1"/>
        <w15:chartTrackingRefBased/>
        <w15:docId w15:val="{53E5E7AE-F2B9-41B7-9F21-600C6AD9004D}"/>
      </w:settings>
    </pkg:xmlData>
  </pkg:part>
  <pkg:part pkg:name="/word/styles.xml" pkg:contentType="application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml">
    <pkg:xmlData>
      <w:styles xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:w15="http://schemas.microsoft.com/office/word/2012/wordml" xmlns:w16cex="http://schemas.microsoft.com/office/word/2018/wordml/cex" xmlns:w16cid="http://schemas.microsoft.com/office/word/2016/wordml/cid" xmlns:w16="http://schemas.microsoft.com/office/word/2018/wordml" xmlns:w16se="http://schemas.microsoft.com/office/word/2015/wordml/symex" mc:Ignorable="w14 w15 w16se w16cid w16 w16cex">
        <w:docDefaults>
          <w:rPrDefault>
            <w:rPr>
              <w:rFonts w:asciiTheme="minorHAnsi" w:eastAsiaTheme="minorEastAsia" w:hAnsiTheme="minorHAnsi" w:cstheme="minorBidi"/>
              <w:kern w:val="2"/>
              <w:sz w:val="21"/>
              <w:szCs w:val="22"/>
              <w:lang w:val="en-US" w:eastAsia="zh-CN" w:bidi="ar-SA"/>
            </w:rPr>
          </w:rPrDefault>
          <w:pPrDefault/>
        </w:docDefaults>
        <w:latentStyles w:defLockedState="0" w:defUIPriority="99" w:defSemiHidden="0" w:defUnhideWhenUsed="0" w:defQFormat="0" w:count="376">
          <w:lsdException w:name="Normal" w:uiPriority="0" w:qFormat="1"/>
          <w:lsdException w:name="heading 1" w:uiPriority="9" w:qFormat="1"/>
          <w:lsdException w:name="heading 2" w:semiHidden="1" w:uiPriority="9" w:unhideWhenUsed="1" w:qFormat="1"/>
          <w:lsdException w:name="heading 3" w:semiHidden="1" w:uiPriority="9" w:unhideWhenUsed="1" w:qFormat="1"/>
          <w:lsdException w:name="heading 4" w:semiHidden="1" w:uiPriority="9" w:unhideWhenUsed="1" w:qFormat="1"/>
          <w:lsdException w:name="heading 5" w:semiHidden="1" w:uiPriority="9" w:unhideWhenUsed="1" w:qFormat="1"/>
          <w:lsdException w:name="heading 6" w:semiHidden="1" w:uiPriority="9" w:unhideWhenUsed="1" w:qFormat="1"/>
          <w:lsdException w:name="heading 7" w:semiHidden="1" w:uiPriority="9" w:unhideWhenUsed="1" w:qFormat="1"/>
          <w:lsdException w:name="heading 8" w:semiHidden="1" w:uiPriority="9" w:unhideWhenUsed="1" w:qFormat="1"/>
          <w:lsdException w:name="heading 9" w:semiHidden="1" w:uiPriority="9" w:unhideWhenUsed="1" w:qFormat="1"/>
          <w:lsdException w:name="index 1" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="index 2" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="index 3" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="index 4" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="index 5" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="index 6" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="index 7" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="index 8" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="index 9" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="toc 1" w:semiHidden="1" w:uiPriority="39" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="toc 2" w:semiHidden="1" w:uiPriority="39" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="toc 3" w:semiHidden="1" w:uiPriority="39" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="toc 4" w:semiHidden="1" w:uiPriority="39" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="toc 5" w:semiHidden="1" w:uiPriority="39" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="toc 6" w:semiHidden="1" w:uiPriority="39" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="toc 7" w:semiHidden="1" w:uiPriority="39" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="toc 8" w:semiHidden="1" w:uiPriority="39" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="toc 9" w:semiHidden="1" w:uiPriority="39" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Normal Indent" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="footnote text" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="annotation text" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="header" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="footer" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="index heading" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="caption" w:semiHidden="1" w:uiPriority="35" w:unhideWhenUsed="1" w:qFormat="1"/>
          <w:lsdException w:name="table of figures" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="envelope address" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="envelope return" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="footnote reference" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="annotation reference" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="line number" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="page number" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="endnote reference" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="endnote text" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="table of authorities" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="macro" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="toa heading" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="List" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="List Bullet" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="List Number" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="List 2" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="List 3" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="List 4" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="List 5" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="List Bullet 2" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="List Bullet 3" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="List Bullet 4" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="List Bullet 5" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="List Number 2" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="List Number 3" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="List Number 4" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="List Number 5" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Title" w:uiPriority="10" w:qFormat="1"/>
          <w:lsdException w:name="Closing" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Signature" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Default Paragraph Font" w:semiHidden="1" w:uiPriority="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Body Text" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Body Text Indent" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="List Continue" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="List Continue 2" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="List Continue 3" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="List Continue 4" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="List Continue 5" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Message Header" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Subtitle" w:uiPriority="11" w:qFormat="1"/>
          <w:lsdException w:name="Salutation" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Date" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Body Text First Indent" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Body Text First Indent 2" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Note Heading" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Body Text 2" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Body Text 3" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Body Text Indent 2" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Body Text Indent 3" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Block Text" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Hyperlink" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="FollowedHyperlink" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Strong" w:uiPriority="22" w:qFormat="1"/>
          <w:lsdException w:name="Emphasis" w:uiPriority="20" w:qFormat="1"/>
          <w:lsdException w:name="Document Map" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Plain Text" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="E-mail Signature" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="HTML Top of Form" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="HTML Bottom of Form" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Normal (Web)" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="HTML Acronym" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="HTML Address" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="HTML Cite" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="HTML Code" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="HTML Definition" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="HTML Keyboard" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="HTML Preformatted" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="HTML Sample" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="HTML Typewriter" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="HTML Variable" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="annotation subject" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="No List" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Outline List 1" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Outline List 2" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Outline List 3" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Table Simple 1" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Table Simple 2" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Table Simple 3" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Table Classic 1" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Table Classic 2" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Table Classic 3" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Table Classic 4" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Table Colorful 1" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Table Colorful 2" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Table Colorful 3" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Table Columns 1" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Table Columns 2" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Table Columns 3" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Table Columns 4" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Table Columns 5" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Table Grid 1" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Table Grid 2" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Table Grid 3" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Table Grid 4" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Table Grid 5" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Table Grid 6" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Table Grid 7" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Table Grid 8" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Table List 1" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Table List 2" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Table List 3" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Table List 4" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Table List 5" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Table List 6" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Table List 7" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Table List 8" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Table 3D effects 1" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Table 3D effects 2" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Table 3D effects 3" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Table Contemporary" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Table Elegant" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Table Professional" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Table Subtle 1" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Table Subtle 2" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Table Web 1" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Table Web 2" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Balloon Text" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Table Grid" w:uiPriority="39"/>
          <w:lsdException w:name="Placeholder Text" w:semiHidden="1"/>
          <w:lsdException w:name="No Spacing" w:uiPriority="1" w:qFormat="1"/>
          <w:lsdException w:name="Light Shading" w:uiPriority="60"/>
          <w:lsdException w:name="Light List" w:uiPriority="61"/>
          <w:lsdException w:name="Light Grid" w:uiPriority="62"/>
          <w:lsdException w:name="Medium Shading 1" w:uiPriority="63"/>
          <w:lsdException w:name="Medium Shading 2" w:uiPriority="64"/>
          <w:lsdException w:name="Medium List 1" w:uiPriority="65"/>
          <w:lsdException w:name="Medium List 2" w:uiPriority="66"/>
          <w:lsdException w:name="Medium Grid 1" w:uiPriority="67"/>
          <w:lsdException w:name="Medium Grid 2" w:uiPriority="68"/>
          <w:lsdException w:name="Medium Grid 3" w:uiPriority="69"/>
          <w:lsdException w:name="Dark List" w:uiPriority="70"/>
          <w:lsdException w:name="Colorful Shading" w:uiPriority="71"/>
          <w:lsdException w:name="Colorful List" w:uiPriority="72"/>
          <w:lsdException w:name="Colorful Grid" w:uiPriority="73"/>
          <w:lsdException w:name="Light Shading Accent 1" w:uiPriority="60"/>
          <w:lsdException w:name="Light List Accent 1" w:uiPriority="61"/>
          <w:lsdException w:name="Light Grid Accent 1" w:uiPriority="62"/>
          <w:lsdException w:name="Medium Shading 1 Accent 1" w:uiPriority="63"/>
          <w:lsdException w:name="Medium Shading 2 Accent 1" w:uiPriority="64"/>
          <w:lsdException w:name="Medium List 1 Accent 1" w:uiPriority="65"/>
          <w:lsdException w:name="Revision" w:semiHidden="1"/>
          <w:lsdException w:name="List Paragraph" w:uiPriority="34" w:qFormat="1"/>
          <w:lsdException w:name="Quote" w:uiPriority="29" w:qFormat="1"/>
          <w:lsdException w:name="Intense Quote" w:uiPriority="30" w:qFormat="1"/>
          <w:lsdException w:name="Medium List 2 Accent 1" w:uiPriority="66"/>
          <w:lsdException w:name="Medium Grid 1 Accent 1" w:uiPriority="67"/>
          <w:lsdException w:name="Medium Grid 2 Accent 1" w:uiPriority="68"/>
          <w:lsdException w:name="Medium Grid 3 Accent 1" w:uiPriority="69"/>
          <w:lsdException w:name="Dark List Accent 1" w:uiPriority="70"/>
          <w:lsdException w:name="Colorful Shading Accent 1" w:uiPriority="71"/>
          <w:lsdException w:name="Colorful List Accent 1" w:uiPriority="72"/>
          <w:lsdException w:name="Colorful Grid Accent 1" w:uiPriority="73"/>
          <w:lsdException w:name="Light Shading Accent 2" w:uiPriority="60"/>
          <w:lsdException w:name="Light List Accent 2" w:uiPriority="61"/>
          <w:lsdException w:name="Light Grid Accent 2" w:uiPriority="62"/>
          <w:lsdException w:name="Medium Shading 1 Accent 2" w:uiPriority="63"/>
          <w:lsdException w:name="Medium Shading 2 Accent 2" w:uiPriority="64"/>
          <w:lsdException w:name="Medium List 1 Accent 2" w:uiPriority="65"/>
          <w:lsdException w:name="Medium List 2 Accent 2" w:uiPriority="66"/>
          <w:lsdException w:name="Medium Grid 1 Accent 2" w:uiPriority="67"/>
          <w:lsdException w:name="Medium Grid 2 Accent 2" w:uiPriority="68"/>
          <w:lsdException w:name="Medium Grid 3 Accent 2" w:uiPriority="69"/>
          <w:lsdException w:name="Dark List Accent 2" w:uiPriority="70"/>
          <w:lsdException w:name="Colorful Shading Accent 2" w:uiPriority="71"/>
          <w:lsdException w:name="Colorful List Accent 2" w:uiPriority="72"/>
          <w:lsdException w:name="Colorful Grid Accent 2" w:uiPriority="73"/>
          <w:lsdException w:name="Light Shading Accent 3" w:uiPriority="60"/>
          <w:lsdException w:name="Light List Accent 3" w:uiPriority="61"/>
          <w:lsdException w:name="Light Grid Accent 3" w:uiPriority="62"/>
          <w:lsdException w:name="Medium Shading 1 Accent 3" w:uiPriority="63"/>
          <w:lsdException w:name="Medium Shading 2 Accent 3" w:uiPriority="64"/>
          <w:lsdException w:name="Medium List 1 Accent 3" w:uiPriority="65"/>
          <w:lsdException w:name="Medium List 2 Accent 3" w:uiPriority="66"/>
          <w:lsdException w:name="Medium Grid 1 Accent 3" w:uiPriority="67"/>
          <w:lsdException w:name="Medium Grid 2 Accent 3" w:uiPriority="68"/>
          <w:lsdException w:name="Medium Grid 3 Accent 3" w:uiPriority="69"/>
          <w:lsdException w:name="Dark List Accent 3" w:uiPriority="70"/>
          <w:lsdException w:name="Colorful Shading Accent 3" w:uiPriority="71"/>
          <w:lsdException w:name="Colorful List Accent 3" w:uiPriority="72"/>
          <w:lsdException w:name="Colorful Grid Accent 3" w:uiPriority="73"/>
          <w:lsdException w:name="Light Shading Accent 4" w:uiPriority="60"/>
          <w:lsdException w:name="Light List Accent 4" w:uiPriority="61"/>
          <w:lsdException w:name="Light Grid Accent 4" w:uiPriority="62"/>
          <w:lsdException w:name="Medium Shading 1 Accent 4" w:uiPriority="63"/>
          <w:lsdException w:name="Medium Shading 2 Accent 4" w:uiPriority="64"/>
          <w:lsdException w:name="Medium List 1 Accent 4" w:uiPriority="65"/>
          <w:lsdException w:name="Medium List 2 Accent 4" w:uiPriority="66"/>
          <w:lsdException w:name="Medium Grid 1 Accent 4" w:uiPriority="67"/>
          <w:lsdException w:name="Medium Grid 2 Accent 4" w:uiPriority="68"/>
          <w:lsdException w:name="Medium Grid 3 Accent 4" w:uiPriority="69"/>
          <w:lsdException w:name="Dark List Accent 4" w:uiPriority="70"/>
          <w:lsdException w:name="Colorful Shading Accent 4" w:uiPriority="71"/>
          <w:lsdException w:name="Colorful List Accent 4" w:uiPriority="72"/>
          <w:lsdException w:name="Colorful Grid Accent 4" w:uiPriority="73"/>
          <w:lsdException w:name="Light Shading Accent 5" w:uiPriority="60"/>
          <w:lsdException w:name="Light List Accent 5" w:uiPriority="61"/>
          <w:lsdException w:name="Light Grid Accent 5" w:uiPriority="62"/>
          <w:lsdException w:name="Medium Shading 1 Accent 5" w:uiPriority="63"/>
          <w:lsdException w:name="Medium Shading 2 Accent 5" w:uiPriority="64"/>
          <w:lsdException w:name="Medium List 1 Accent 5" w:uiPriority="65"/>
          <w:lsdException w:name="Medium List 2 Accent 5" w:uiPriority="66"/>
          <w:lsdException w:name="Medium Grid 1 Accent 5" w:uiPriority="67"/>
          <w:lsdException w:name="Medium Grid 2 Accent 5" w:uiPriority="68"/>
          <w:lsdException w:name="Medium Grid 3 Accent 5" w:uiPriority="69"/>
          <w:lsdException w:name="Dark List Accent 5" w:uiPriority="70"/>
          <w:lsdException w:name="Colorful Shading Accent 5" w:uiPriority="71"/>
          <w:lsdException w:name="Colorful List Accent 5" w:uiPriority="72"/>
          <w:lsdException w:name="Colorful Grid Accent 5" w:uiPriority="73"/>
          <w:lsdException w:name="Light Shading Accent 6" w:uiPriority="60"/>
          <w:lsdException w:name="Light List Accent 6" w:uiPriority="61"/>
          <w:lsdException w:name="Light Grid Accent 6" w:uiPriority="62"/>
          <w:lsdException w:name="Medium Shading 1 Accent 6" w:uiPriority="63"/>
          <w:lsdException w:name="Medium Shading 2 Accent 6" w:uiPriority="64"/>
          <w:lsdException w:name="Medium List 1 Accent 6" w:uiPriority="65"/>
          <w:lsdException w:name="Medium List 2 Accent 6" w:uiPriority="66"/>
          <w:lsdException w:name="Medium Grid 1 Accent 6" w:uiPriority="67"/>
          <w:lsdException w:name="Medium Grid 2 Accent 6" w:uiPriority="68"/>
          <w:lsdException w:name="Medium Grid 3 Accent 6" w:uiPriority="69"/>
          <w:lsdException w:name="Dark List Accent 6" w:uiPriority="70"/>
          <w:lsdException w:name="Colorful Shading Accent 6" w:uiPriority="71"/>
          <w:lsdException w:name="Colorful List Accent 6" w:uiPriority="72"/>
          <w:lsdException w:name="Colorful Grid Accent 6" w:uiPriority="73"/>
          <w:lsdException w:name="Subtle Emphasis" w:uiPriority="19" w:qFormat="1"/>
          <w:lsdException w:name="Intense Emphasis" w:uiPriority="21" w:qFormat="1"/>
          <w:lsdException w:name="Subtle Reference" w:uiPriority="31" w:qFormat="1"/>
          <w:lsdException w:name="Intense Reference" w:uiPriority="32" w:qFormat="1"/>
          <w:lsdException w:name="Book Title" w:uiPriority="33" w:qFormat="1"/>
          <w:lsdException w:name="Bibliography" w:semiHidden="1" w:uiPriority="37" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="TOC Heading" w:semiHidden="1" w:uiPriority="39" w:unhideWhenUsed="1" w:qFormat="1"/>
          <w:lsdException w:name="Plain Table 1" w:uiPriority="41"/>
          <w:lsdException w:name="Plain Table 2" w:uiPriority="42"/>
          <w:lsdException w:name="Plain Table 3" w:uiPriority="43"/>
          <w:lsdException w:name="Plain Table 4" w:uiPriority="44"/>
          <w:lsdException w:name="Plain Table 5" w:uiPriority="45"/>
          <w:lsdException w:name="Grid Table Light" w:uiPriority="40"/>
          <w:lsdException w:name="Grid Table 1 Light" w:uiPriority="46"/>
          <w:lsdException w:name="Grid Table 2" w:uiPriority="47"/>
          <w:lsdException w:name="Grid Table 3" w:uiPriority="48"/>
          <w:lsdException w:name="Grid Table 4" w:uiPriority="49"/>
          <w:lsdException w:name="Grid Table 5 Dark" w:uiPriority="50"/>
          <w:lsdException w:name="Grid Table 6 Colorful" w:uiPriority="51"/>
          <w:lsdException w:name="Grid Table 7 Colorful" w:uiPriority="52"/>
          <w:lsdException w:name="Grid Table 1 Light Accent 1" w:uiPriority="46"/>
          <w:lsdException w:name="Grid Table 2 Accent 1" w:uiPriority="47"/>
          <w:lsdException w:name="Grid Table 3 Accent 1" w:uiPriority="48"/>
          <w:lsdException w:name="Grid Table 4 Accent 1" w:uiPriority="49"/>
          <w:lsdException w:name="Grid Table 5 Dark Accent 1" w:uiPriority="50"/>
          <w:lsdException w:name="Grid Table 6 Colorful Accent 1" w:uiPriority="51"/>
          <w:lsdException w:name="Grid Table 7 Colorful Accent 1" w:uiPriority="52"/>
          <w:lsdException w:name="Grid Table 1 Light Accent 2" w:uiPriority="46"/>
          <w:lsdException w:name="Grid Table 2 Accent 2" w:uiPriority="47"/>
          <w:lsdException w:name="Grid Table 3 Accent 2" w:uiPriority="48"/>
          <w:lsdException w:name="Grid Table 4 Accent 2" w:uiPriority="49"/>
          <w:lsdException w:name="Grid Table 5 Dark Accent 2" w:uiPriority="50"/>
          <w:lsdException w:name="Grid Table 6 Colorful Accent 2" w:uiPriority="51"/>
          <w:lsdException w:name="Grid Table 7 Colorful Accent 2" w:uiPriority="52"/>
          <w:lsdException w:name="Grid Table 1 Light Accent 3" w:uiPriority="46"/>
          <w:lsdException w:name="Grid Table 2 Accent 3" w:uiPriority="47"/>
          <w:lsdException w:name="Grid Table 3 Accent 3" w:uiPriority="48"/>
          <w:lsdException w:name="Grid Table 4 Accent 3" w:uiPriority="49"/>
          <w:lsdException w:name="Grid Table 5 Dark Accent 3" w:uiPriority="50"/>
          <w:lsdException w:name="Grid Table 6 Colorful Accent 3" w:uiPriority="51"/>
          <w:lsdException w:name="Grid Table 7 Colorful Accent 3" w:uiPriority="52"/>
          <w:lsdException w:name="Grid Table 1 Light Accent 4" w:uiPriority="46"/>
          <w:lsdException w:name="Grid Table 2 Accent 4" w:uiPriority="47"/>
          <w:lsdException w:name="Grid Table 3 Accent 4" w:uiPriority="48"/>
          <w:lsdException w:name="Grid Table 4 Accent 4" w:uiPriority="49"/>
          <w:lsdException w:name="Grid Table 5 Dark Accent 4" w:uiPriority="50"/>
          <w:lsdException w:name="Grid Table 6 Colorful Accent 4" w:uiPriority="51"/>
          <w:lsdException w:name="Grid Table 7 Colorful Accent 4" w:uiPriority="52"/>
          <w:lsdException w:name="Grid Table 1 Light Accent 5" w:uiPriority="46"/>
          <w:lsdException w:name="Grid Table 2 Accent 5" w:uiPriority="47"/>
          <w:lsdException w:name="Grid Table 3 Accent 5" w:uiPriority="48"/>
          <w:lsdException w:name="Grid Table 4 Accent 5" w:uiPriority="49"/>
          <w:lsdException w:name="Grid Table 5 Dark Accent 5" w:uiPriority="50"/>
          <w:lsdException w:name="Grid Table 6 Colorful Accent 5" w:uiPriority="51"/>
          <w:lsdException w:name="Grid Table 7 Colorful Accent 5" w:uiPriority="52"/>
          <w:lsdException w:name="Grid Table 1 Light Accent 6" w:uiPriority="46"/>
          <w:lsdException w:name="Grid Table 2 Accent 6" w:uiPriority="47"/>
          <w:lsdException w:name="Grid Table 3 Accent 6" w:uiPriority="48"/>
          <w:lsdException w:name="Grid Table 4 Accent 6" w:uiPriority="49"/>
          <w:lsdException w:name="Grid Table 5 Dark Accent 6" w:uiPriority="50"/>
          <w:lsdException w:name="Grid Table 6 Colorful Accent 6" w:uiPriority="51"/>
          <w:lsdException w:name="Grid Table 7 Colorful Accent 6" w:uiPriority="52"/>
          <w:lsdException w:name="List Table 1 Light" w:uiPriority="46"/>
          <w:lsdException w:name="List Table 2" w:uiPriority="47"/>
          <w:lsdException w:name="List Table 3" w:uiPriority="48"/>
          <w:lsdException w:name="List Table 4" w:uiPriority="49"/>
          <w:lsdException w:name="List Table 5 Dark" w:uiPriority="50"/>
          <w:lsdException w:name="List Table 6 Colorful" w:uiPriority="51"/>
          <w:lsdException w:name="List Table 7 Colorful" w:uiPriority="52"/>
          <w:lsdException w:name="List Table 1 Light Accent 1" w:uiPriority="46"/>
          <w:lsdException w:name="List Table 2 Accent 1" w:uiPriority="47"/>
          <w:lsdException w:name="List Table 3 Accent 1" w:uiPriority="48"/>
          <w:lsdException w:name="List Table 4 Accent 1" w:uiPriority="49"/>
          <w:lsdException w:name="List Table 5 Dark Accent 1" w:uiPriority="50"/>
          <w:lsdException w:name="List Table 6 Colorful Accent 1" w:uiPriority="51"/>
          <w:lsdException w:name="List Table 7 Colorful Accent 1" w:uiPriority="52"/>
          <w:lsdException w:name="List Table 1 Light Accent 2" w:uiPriority="46"/>
          <w:lsdException w:name="List Table 2 Accent 2" w:uiPriority="47"/>
          <w:lsdException w:name="List Table 3 Accent 2" w:uiPriority="48"/>
          <w:lsdException w:name="List Table 4 Accent 2" w:uiPriority="49"/>
          <w:lsdException w:name="List Table 5 Dark Accent 2" w:uiPriority="50"/>
          <w:lsdException w:name="List Table 6 Colorful Accent 2" w:uiPriority="51"/>
          <w:lsdException w:name="List Table 7 Colorful Accent 2" w:uiPriority="52"/>
          <w:lsdException w:name="List Table 1 Light Accent 3" w:uiPriority="46"/>
          <w:lsdException w:name="List Table 2 Accent 3" w:uiPriority="47"/>
          <w:lsdException w:name="List Table 3 Accent 3" w:uiPriority="48"/>
          <w:lsdException w:name="List Table 4 Accent 3" w:uiPriority="49"/>
          <w:lsdException w:name="List Table 5 Dark Accent 3" w:uiPriority="50"/>
          <w:lsdException w:name="List Table 6 Colorful Accent 3" w:uiPriority="51"/>
          <w:lsdException w:name="List Table 7 Colorful Accent 3" w:uiPriority="52"/>
          <w:lsdException w:name="List Table 1 Light Accent 4" w:uiPriority="46"/>
          <w:lsdException w:name="List Table 2 Accent 4" w:uiPriority="47"/>
          <w:lsdException w:name="List Table 3 Accent 4" w:uiPriority="48"/>
          <w:lsdException w:name="List Table 4 Accent 4" w:uiPriority="49"/>
          <w:lsdException w:name="List Table 5 Dark Accent 4" w:uiPriority="50"/>
          <w:lsdException w:name="List Table 6 Colorful Accent 4" w:uiPriority="51"/>
          <w:lsdException w:name="List Table 7 Colorful Accent 4" w:uiPriority="52"/>
          <w:lsdException w:name="List Table 1 Light Accent 5" w:uiPriority="46"/>
          <w:lsdException w:name="List Table 2 Accent 5" w:uiPriority="47"/>
          <w:lsdException w:name="List Table 3 Accent 5" w:uiPriority="48"/>
          <w:lsdException w:name="List Table 4 Accent 5" w:uiPriority="49"/>
          <w:lsdException w:name="List Table 5 Dark Accent 5" w:uiPriority="50"/>
          <w:lsdException w:name="List Table 6 Colorful Accent 5" w:uiPriority="51"/>
          <w:lsdException w:name="List Table 7 Colorful Accent 5" w:uiPriority="52"/>
          <w:lsdException w:name="List Table 1 Light Accent 6" w:uiPriority="46"/>
          <w:lsdException w:name="List Table 2 Accent 6" w:uiPriority="47"/>
          <w:lsdException w:name="List Table 3 Accent 6" w:uiPriority="48"/>
          <w:lsdException w:name="List Table 4 Accent 6" w:uiPriority="49"/>
          <w:lsdException w:name="List Table 5 Dark Accent 6" w:uiPriority="50"/>
          <w:lsdException w:name="List Table 6 Colorful Accent 6" w:uiPriority="51"/>
          <w:lsdException w:name="List Table 7 Colorful Accent 6" w:uiPriority="52"/>
          <w:lsdException w:name="Mention" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Smart Hyperlink" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Hashtag" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Unresolved Mention" w:semiHidden="1" w:unhideWhenUsed="1"/>
          <w:lsdException w:name="Smart Link" w:semiHidden="1" w:unhideWhenUsed="1"/>
        </w:latentStyles>
        <w:style w:type="paragraph" w:default="1" w:styleId="a">
          <w:name w:val="Normal"/>
          <w:qFormat/>
          <w:pPr>
            <w:widowControl w:val="0"/>
            <w:jc w:val="both"/>
          </w:pPr>
        </w:style>
        <w:style w:type="character" w:default="1" w:styleId="a0">
          <w:name w:val="Default Paragraph Font"/>
          <w:uiPriority w:val="1"/>
          <w:semiHidden/>
          <w:unhideWhenUsed/>
        </w:style>
        <w:style w:type="table" w:default="1" w:styleId="a1">
          <w:name w:val="Normal Table"/>
          <w:uiPriority w:val="99"/>
          <w:semiHidden/>
          <w:unhideWhenUsed/>
          <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="numbering" w:default="1" w:styleId="a2">
          <w:name w:val="No List"/>
          <w:uiPriority w:val="99"/>
          <w:semiHidden/>
          <w:unhideWhenUsed/>
        </w:style>
      </w:styles>
    </pkg:xmlData>
  </pkg:part>
  <pkg:part pkg:name="/word/webSettings.xml" pkg:contentType="application/vnd.openxmlformats-officedocument.wordprocessingml.webSettings+xml">
    <pkg:xmlData>
      <w:webSettings xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:w15="http://schemas.microsoft.com/office/word/2012/wordml" xmlns:w16cex="http://schemas.microsoft.com/office/word/2018/wordml/cex" xmlns:w16cid="http://schemas.microsoft.com/office/word/2016/wordml/cid" xmlns:w16="http://schemas.microsoft.com/office/word/2018/wordml" xmlns:w16se="http://schemas.microsoft.com/office/word/2015/wordml/symex" mc:Ignorable="w14 w15 w16se w16cid w16 w16cex">
        <w:optimizeForBrowser/>
        <w:allowPNG/>
      </w:webSettings>
    </pkg:xmlData>
  </pkg:part>
  <pkg:part pkg:name="/word/fontTable.xml" pkg:contentType="application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+xml">
    <pkg:xmlData>
      <w:fonts xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:w15="http://schemas.microsoft.com/office/word/2012/wordml" xmlns:w16cex="http://schemas.microsoft.com/office/word/2018/wordml/cex" xmlns:w16cid="http://schemas.microsoft.com/office/word/2016/wordml/cid" xmlns:w16="http://schemas.microsoft.com/office/word/2018/wordml" xmlns:w16se="http://schemas.microsoft.com/office/word/2015/wordml/symex" mc:Ignorable="w14 w15 w16se w16cid w16 w16cex">
        <w:font w:name="等线">
          <w:altName w:val="DengXian"/>
          <w:panose1 w:val="02010600030101010101"/>
          <w:charset w:val="86"/>
          <w:family w:val="auto"/>
          <w:pitch w:val="variable"/>
          <w:sig w:usb0="A00002BF" w:usb1="38CF7CFA" w:usb2="00000016" w:usb3="00000000" w:csb0="0004000F" w:csb1="00000000"/>
        </w:font>
        <w:font w:name="Times New Roman">
          <w:panose1 w:val="02020603050405020304"/>
          <w:charset w:val="00"/>
          <w:family w:val="roman"/>
          <w:pitch w:val="variable"/>
          <w:sig w:usb0="E0002EFF" w:usb1="C000785B" w:usb2="00000009" w:usb3="00000000" w:csb0="000001FF" w:csb1="00000000"/>
        </w:font>
        <w:font w:name="等线 Light">
          <w:panose1 w:val="02010600030101010101"/>
          <w:charset w:val="86"/>
          <w:family w:val="auto"/>
          <w:pitch w:val="variable"/>
          <w:sig w:usb0="A00002BF" w:usb1="38CF7CFA" w:usb2="00000016" w:usb3="00000000" w:csb0="0004000F" w:csb1="00000000"/>
        </w:font>
      </w:fonts>
    </pkg:xmlData>
  </pkg:part>
  <pkg:part pkg:name="/docProps/core.xml" pkg:contentType="application/vnd.openxmlformats-package.core-properties+xml" pkg:padding="256">
    <pkg:xmlData>
      <cp:coreProperties xmlns:cp="http://schemas.openxmlformats.org/package/2006/metadata/core-properties" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:dcmitype="http://purl.org/dc/dcmitype/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <dc:title/>
        <dc:subject/>
        <dc:creator>李走开</dc:creator>
        <cp:keywords/>
        <dc:description/>
        <cp:lastModifiedBy>李 走开</cp:lastModifiedBy>
        <cp:revision>2</cp:revision>
        <dcterms:created xsi:type="dcterms:W3CDTF">2021-03-05T09:11:00Z</dcterms:created>
        <dcterms:modified xsi:type="dcterms:W3CDTF">2021-03-05T09:11:00Z</dcterms:modified>
        <cp:category/>
      </cp:coreProperties>
    </pkg:xmlData>
  </pkg:part>
  <pkg:part pkg:name="/docProps/app.xml" pkg:contentType="application/vnd.openxmlformats-officedocument.extended-properties+xml" pkg:padding="256">
    <pkg:xmlData>
      <Properties xmlns="http://schemas.openxmlformats.org/officeDocument/2006/extended-properties" xmlns:vt="http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes">
        <Template>Normal.dotm</Template>
        <TotalTime>1</TotalTime>
        <Pages>1</Pages>
        <Words>1</Words>
        <Characters>6</Characters>
        <Application>Microsoft Office Word</Application>
        <DocSecurity>0</DocSecurity>
        <PresentationFormat/>
        <Lines>1</Lines>
        <Paragraphs>1</Paragraphs>
        <Slides>0</Slides>
        <Notes>0</Notes>
        <HiddenSlides>0</HiddenSlides>
        <MMClips>0</MMClips>
        <ScaleCrop>false</ScaleCrop>
        <Manager/>
        <Company/>
        <LinksUpToDate>false</LinksUpToDate>
        <CharactersWithSpaces>6</CharactersWithSpaces>
        <SharedDoc>false</SharedDoc>
        <HyperlinksChanged>false</HyperlinksChanged>
        <AppVersion>16.0000</AppVersion>
      </Properties>
    </pkg:xmlData>
  </pkg:part>
  <pkg:part pkg:name="/docProps/custom.xml" pkg:contentType="application/vnd.openxmlformats-officedocument.custom-properties+xml" pkg:padding="256">
    <pkg:xmlData>
      <Properties xmlns="http://schemas.openxmlformats.org/officeDocument/2006/custom-properties" xmlns:vt="http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes">
        <property fmtid="{D5CDD505-2E9C-101B-9397-08002B2CF9AE}" pid="2" name="KSOProductBuildVer">
          <vt:lpwstr>2052-9.1.0.3914</vt:lpwstr>
        </property>
      </Properties>
    </pkg:xmlData>
  </pkg:part>
</pkg:package>

  • 文件base64码

前端需要传入通过调用EchartsAPI myChart.getDataURL() 来获得baes64的编码,值得注意的是在Echarts的option中需要在series上加入 animation: false 属性 不然获得的图片可能只有一张背景图

  • 测试用例

Test.java 测试

@Test
public void loadCreateFile(HttpServletResponse res, String title, String base64, Ingeter type) {
        try {
            Map<String, Object> data = new HashMap();
            data.put("title", title);
			data.put("base64", base64);
            OutputStream out = res.getOutputStream();
            switch (type) {
                // pdf
                case 1:
                    res.reset();
                    String content = FreeMarkerUtil.freeMarkerRender(data, "pdf.ftl",this.getClass());
                    res.setContentType("application/pdf");
                    String pdfFileName = URLEncoder.encode("测试.pdf", "UTF-8");
                    res.setHeader("Content-disposition", "attachment;filename=" + pdfFileName);
                    FreeMarkerUtil.exportpdf(content, out);
                    break;
                // world
                case 2:
                    res.reset();
                    res.setContentType("application/msword");
                    String worldFileName = URLEncoder.encode("测试.doc", "UTF-8");
                    res.setHeader("Content-Disposition", "attachment;fileName=" + worldFileName);
                    FreeMarkerUtil.exportWord(data, "world.ftl", out,this.getClass());
                    break;
                // html
                case 3:
                    res.reset();
                    res.setContentType("application/x-msdownload");
                    String zipFileName = URLEncoder.encode("测试.zip", "UTF-8");
                    res.setHeader("Content-Disposition", "attachment;filename=" + zipFileName);
                    ZipOutputStream zos = new ZipOutputStream(out);
                    List<String> list = new ArrayList<String>() {
                        {
                            add("pdf.ftl");
                        }
                    };
                    FreeMarkerUtil.exportZipFile2(list, zos, data, "pdf.ftl", "pdf.html",this.getClass());
                    break;
            }

        } catch (Exception e) {
			e.getMessage();
        }
    }

最后总结上述提到的问题

  1. 在ftl的body中设置字体格式为 font-family:SimSun;另外需要把 simsun.ttc 文件一同放进resource/html目录下,该文件可以在Windows10系统的 C:\Windows\Fonts 目录下找到。你也可以下载自己喜欢的字体格式进行替换。
  1. 导入xhtmlrenderer包 创建工具类B64ImgReplacedElementFactory.java在获得模板的字符串时替换img标签的方式来呈现图片
  1. 导出world文件的解决思路如下:
    第一步 创建.doc文件 在文件中添加好文字和图片。
    第二步 将文件另存为xml格式的文件,然后使用格式化工具进行格式化。
    第三步 打开xml文件可以根据实际需求加入循环或者判断进行修改,如 <w:p>标签表示的是一个段落
    第四步 将里面的图片和文字用相关表达式进行替换 如 &{base64},这里值得注意的是图片的base64码要填充的是 data:image/png;base64, 之后的部分
    第五步 将xml文件后缀修改为ftl放进 resources/html 目录下
  1. 项目部署在Linux后无法获得路径的问题,在加载FreeMarker配置的时候有多种方式,我们不选用路径的方式加载,使用类的方式来加载就可以解决这个问题
    Configuration freemarkerCfg = new Configuration();
    // 使用类加载方式
    freemarkerCfg.setClassForTemplateLoading(this.getClass, File.separator);
    // 使用路径加载方式
    freemarkerCfg.setDirectoryForTemplateLoading(new File("C:\Users\template"))
    那么在打包zip时候我们采用下面这种方式获得文件流来获得文件
    ClassPathResource classPathResource = new ClassPathResource("html/pdf.ftl");
    InputStream inputStream = classPathResource.getInputStream();
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Spring Boot是一个用于构建独立的、基于生产级别的Spring应用程序的框架。而Freemarker是一种模板引擎,用于生成动态内容,特别适合Web应用程序的开发。在Spring Boot中使用Freemarker可以通过引入相应的依赖和配置来实现。 首先,在Spring Boot工程中引入Freemarker依赖。可以通过在pom.xml文件中添加以下依赖来实现: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> ``` 这样,在工程中就可以使用Freemarker来处理模板了。如果想要修改模板文件的位置等配置,可以在application.properties文件中进行配置。比如可以通过以下配置来指定模板文件的位置: ``` spring.freemarker.allow-request-override=false spring.freemarker.allow-session-override=false spring.freemarker.cache=false spring.freemarker.charset=UTF-8 spring.freemarker.check-template-location=true spring.freemarker.content-type=text/html spring.freemarker.expose-request-attributes=false spring.freemarker.expose-session-attributes=false spring.freemarker.suffix=.ftl spring.freemarker.template-loader-path=classpath:/templates/ ``` 这样,Spring Boot就会根据这些配置来加载并解析模板文件,生成相应的动态内容。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Spring Boot 整合 Freemarker](https://blog.csdn.net/yaxuan88521/article/details/117173289)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Springboot整合FreeMarker](https://blog.csdn.net/m0_67402096/article/details/126114796)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值