浏览代码

根据freemarker模板生成xml文件,将xml文件转为word

wangqiang 1 年之前
父节点
当前提交
8f5d89448b

+ 24 - 0
jeeplus-modules/jeeplus-human/pom.xml

@@ -12,6 +12,30 @@
     <artifactId>jeeplus-human</artifactId>
 
     <dependencies>
+        <!-- Apache POI 用于处理 Word 文档 -->
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi</artifactId>
+            <version>5.2.4</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-ooxml</artifactId>
+            <version>5.2.4</version>
+        </dependency>
+
+        <!-- FreeMarker 模板引擎 -->
+        <dependency>
+            <groupId>org.freemarker</groupId>
+            <artifactId>freemarker</artifactId>
+            <version>2.3.31</version>
+        </dependency>
+        <!-- Apache PDFBox 依赖 -->
+        <dependency>
+            <groupId>org.apache.pdfbox</groupId>
+            <artifactId>pdfbox</artifactId>
+            <version>2.0.24</version>
+        </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-freemarker</artifactId>

+ 40 - 0
jeeplus-modules/jeeplus-human/src/main/java/com/jeeplus/human/depart/handover/domain/Handover.java

@@ -1,8 +1,38 @@
 package com.jeeplus.human.depart.handover.domain;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.jeeplus.core.domain.BaseEntity;
 import lombok.Data;
+import org.apache.pdfbox.pdmodel.PDDocument;
+import org.apache.pdfbox.pdmodel.PDPage;
+import org.apache.pdfbox.pdmodel.PDPageContentStream;
+import org.apache.pdfbox.pdmodel.common.PDRectangle;
+import org.apache.pdfbox.pdmodel.font.PDType0Font;
+
+import org.apache.pdfbox.pdmodel.graphics.state.RenderingMode;
+import org.apache.pdfbox.util.Matrix;
+import org.dom4j.Attribute;
+import org.dom4j.Element;
+import org.dom4j.io.SAXReader;
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import java.io.File;
+import java.io.*;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
 
 /**
  * 离职交接表
@@ -23,4 +53,14 @@ public class Handover extends BaseEntity {
     private String processDefinitionId;
     private String draftAdministrator;  //底稿管理员
     private String registrationId;      //离职申请表id
+
+    private String xmlFilePath;         //生成的xml文件的地址
+    private String pdfFilePath;         //生成的xml文件的地址
+    private String wordFilePath;         //生成的word文件的地址
+
+    @TableField(exist = false)
+    private String arrivalDate;             //到岗日期
+    @TableField(exist = false)
+    private String departResignationDate;   //预定离职日期
+
 }

+ 3 - 0
jeeplus-modules/jeeplus-human/src/main/java/com/jeeplus/human/depart/handover/mapper/HandoverMapper.java

@@ -19,4 +19,7 @@ public interface HandoverMapper extends BaseMapper<Handover> {
     Handover getById(@Param("id") String id);
 
     void updateStatusById(@Param("id") String id, @Param("type") String type);
+
+    Handover getUserInfoById(@Param("handoverId") String handoverId);
+
 }

+ 9 - 1
jeeplus-modules/jeeplus-human/src/main/java/com/jeeplus/human/depart/handover/mapper/xml/HandoverMapper.xml

@@ -17,7 +17,10 @@
         a.remarks,
         a.department,
         a.draft_administrator,
-        a.registration_id
+        a.registration_id,
+        a.xml_file_path,
+        a.pdf_file_path,
+        a.word_file_path
     </sql>
     <update id="updateStatusById">
         UPDATE human_resources_depart_handover SET type = #{type}
@@ -30,4 +33,9 @@
         from human_resources_depart_handover a
         where a.id = #{id} and a.del_flag = '0'
     </select>
+    <select id="getUserInfoById" resultType="com.jeeplus.human.depart.handover.domain.Handover">
+        SELECT a.name,a.arrival_date,a.depart_resignation_date FROM human_resources_depart_registration a
+        LEFT JOIN human_resources_depart_handover b on a.id = b.registration_id
+        WHERE b.id = #{handoverId}
+    </select>
 </mapper>

+ 1 - 1
jeeplus-modules/jeeplus-human/src/main/java/com/jeeplus/human/depart/handover/service/HandoverRecoveryService.java

@@ -131,7 +131,7 @@ public class HandoverRecoveryService extends ServiceImpl<HandoverRecoveryMapper,
 
             map2.put("taskId",uuid);
             map2.put("title","离职交接审批完成,请点击下载离职证明");
-            map2.put("defId",report.getId());
+            map2.put("defId",report.getHandoverId());
             map2.put("taskName","离职交接审批完成,请点击下载离职证明");
             map2.put("createUser",userDTO.getLoginName());
             map2.put("createTime",day);

+ 615 - 2
jeeplus-modules/jeeplus-human/src/main/java/com/jeeplus/human/depart/handover/service/HandoverService.java

@@ -7,18 +7,47 @@ import com.jeeplus.common.TokenProvider;
 import com.jeeplus.flowable.feign.IFlowableApi;
 import com.jeeplus.human.depart.handover.domain.*;
 import com.jeeplus.human.depart.handover.mapper.HandoverMapper;
-import com.jeeplus.human.depart.registration.domain.DepartRegistration;
-import com.jeeplus.human.enrollment.enrollmentRegistration.domain.EnrollmentKeyCard;
+import com.jeeplus.human.enrollment.enrollmentRegistration.utils.HunamFreemarkerUtil;
 import com.jeeplus.sys.feign.IRoleApi;
 import com.jeeplus.sys.feign.IUserApi;
 import com.jeeplus.sys.service.dto.RoleDTO;
 import com.jeeplus.sys.service.dto.UserDTO;
+import freemarker.template.Configuration;
+import freemarker.template.Template;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.pdfbox.pdmodel.PDDocument;
+import org.apache.pdfbox.pdmodel.PDPage;
+import org.apache.pdfbox.pdmodel.PDPageContentStream;
+import org.apache.pdfbox.pdmodel.common.PDRectangle;
+import org.apache.pdfbox.pdmodel.font.PDType0Font;
+import org.apache.pdfbox.pdmodel.graphics.state.RenderingMode;
+import org.apache.pdfbox.util.Matrix;
+import org.apache.poi.xwpf.usermodel.*;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTR;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRPr;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import java.io.*;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
+import java.time.LocalDate;
 import java.util.*;
 
 /**
@@ -289,6 +318,590 @@ public class HandoverService extends ServiceImpl<HandoverMapper, Handover> {
 
         mapper.insert(report);
 
+        //根据freemarker模板生成离职证明XML文件
+        String xmlFilePath = getXmlByFreeMarker(report.getId());
+        report.setXmlFilePath(xmlFilePath);
+
+//        String pdfFilePath = convertToPDF(report);
+        String wordPath = convertToWord(report);
+//        report.setPdfFilePath(pdfFilePath);
+        report.setWordFilePath(wordPath);
+        mapper.updateById(report);
+
         return report;
     }
+
+    /**
+     * 根据id获取离职用户信息
+     * @param handoverId
+     * @return
+     */
+    public Handover getUserInfoById(String handoverId) {
+        return mapper.getUserInfoById(handoverId);
+    }
+
+
+    public String getXmlByFreeMarker(String handoverId){
+
+        //根据离职交接表id查询出  离职的员工名称,到岗日期,申请的预定离职日期,
+        Handover handover = mapper.getUserInfoById(handoverId);
+
+        Map data = new HashMap();
+        data.put("userName",handover.getName());
+        String arrivalDate = handover.getArrivalDate();
+        String departResignationDate = handover.getDepartResignationDate();
+        String[] departParts = departResignationDate.split("\\s+");
+        String departTime = departParts[0]; // 日期部分
+        String[] departDatePart = departParts[0].split("-"); // 日期部分
+
+        // 根据空格分割日期和时间
+        String[] parts = arrivalDate.split("\\s+");
+        String arrivalTime = parts[0]; // 日期部分
+        String[] datePart = parts[0].split("-"); // 日期部分
+        //拆分出年月日
+        String year = datePart[0];
+        String month = datePart[1];
+        String day = datePart[2];
+
+        //进入单位时间
+        data.put("year",year);
+        data.put("month",month);
+        data.put("day",day);
+
+        LocalDate currentDate = LocalDate.of(Integer.parseInt(departDatePart[0]), Integer.parseInt(departDatePart[1]), Integer.parseInt(departDatePart[2])).plusDays(1);
+        int nextDayYear = currentDate.getYear(); // 加一天后的年份
+        int nextDayMonth = currentDate.getMonthValue(); // 加一天后的月份
+        int nextDay = currentDate.getDayOfMonth(); // 加一天后的天数
+
+        data.put("year2",nextDayYear+"");
+        data.put("month2",nextDayMonth+"");
+        data.put("day2",nextDay+"");
+
+        LocalDate nowDate = LocalDate.now(); // 获取当前日期
+
+        int nowYear = nowDate.getYear(); // 当前年份
+        int nowMonth = nowDate.getMonthValue(); // 当前月份
+        int nowDay = nowDate.getDayOfMonth(); // 当前日期
+
+        data.put("year3",nowYear+"");
+        data.put("month3",nowMonth+"");
+        data.put("day3",nowDay+"");
+
+        data.put("completeDay",arrivalTime);
+        data.put("completeDay2",departTime);
+
+        //模板对象
+        Template template=null;
+        //下载文件地址
+        String filePath = null;
+        if(System.getProperty("os.name").toLowerCase().contains("win")){
+            filePath = this.getClass().getResource("/").getPath()+"/freemarker";
+        }else{
+            filePath = "/mnt/project/cloud/freemarker";
+        }
+        //freemaker模板路径
+        File path = new File(filePath);
+
+        Configuration cfg = new Configuration();
+
+        String fileName = handover.getName() + "离职证明";
+        try {
+            cfg.setDirectoryForTemplateLoading(path);
+            //选择对应的ftl文件
+            template = cfg.getTemplate("departProve.ftl","UTF-8");
+
+            File docFile = new File(fileName);
+
+            //本地保存文件地址
+            String fileSavePath = null;
+            if(System.getProperty("os.name").toLowerCase().contains("win")){
+                fileSavePath = "D:/attachment-file/";
+            }else{
+                fileSavePath = "/attachment-file/";
+            }
+
+            HunamFreemarkerUtil.generateFile(data,template,docFile);
+
+            File destinationFolder = new File(fileSavePath);
+            Path targetPath = Paths.get(destinationFolder.getPath(), docFile.getName());
+            Files.move(docFile.toPath(), targetPath, StandardCopyOption.REPLACE_EXISTING);
+
+            return targetPath.toString();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }finally {
+
+            if(System.getProperty("os.name").toLowerCase().contains("win")){
+                //获取tomcat的路径
+                String tomcatFilePath=System.getProperty("catalina.home");
+                //删除tomcat目录下的处理后的文件信息
+                File tomcatFile = new File(tomcatFilePath+"/bin/"+fileName);
+                if (tomcatFile.isFile()) {
+                    tomcatFile.delete();
+                }
+            }else{
+                //删除目录下的处理后的文件信息
+                File tomcatFile = new File("/mnt/project/cloud/"+fileName);
+                if (tomcatFile.isFile()) {
+                    tomcatFile.delete();
+                }
+            }
+        }
+        return "";
+    }
+
+    public static String convertToWord(Handover report) {
+        try {
+            String filePath = report.getXmlFilePath();
+            // 解析 XML 文件
+            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+            DocumentBuilder builder = factory.newDocumentBuilder();
+            Document document = builder.parse(new File(filePath)); // 输入的 XML 文件
+
+            // 生成 Word 文档
+            XWPFDocument doc = new XWPFDocument();
+
+            //本地保存文件地址
+            String fileSavePath = null;
+            if(System.getProperty("os.name").toLowerCase().contains("win")){
+                fileSavePath = "D:/attachment-file/";
+            }else{
+                fileSavePath = "/attachment-file/";
+            }
+            String fileSaveName = report.getName() + "离职证明.docx";
+            FileOutputStream out = new FileOutputStream(fileSavePath + fileSaveName); // 输出的 Word 文件
+
+            // 遍历 XML 文件内容并将其写入 Word 文档
+            NodeList nodeList = document.getDocumentElement().getChildNodes();
+            String textContent = "";
+            for (int i = 0; i < nodeList.getLength(); i++) {
+                Node node = nodeList.item(i);
+                if (node.getNodeType() == Node.ELEMENT_NODE) {
+                    Element element = (Element) node;
+
+                    // 获取 XML 元素的文本内容
+                    textContent = element.getTextContent().replaceAll("\\s+", "");
+
+                }
+            }
+            String[] paragraphs = null;
+            List<String> valueLines = new ArrayList<>();
+            if (StringUtils.isNotBlank(textContent)) {
+
+                // 使用句号分割文本
+                paragraphs = textContent.split("。");
+
+            }
+            if (null != paragraphs && paragraphs.length>0) {
+                String firstLine = paragraphs[0].substring(0,paragraphs[0].indexOf("劳动合同的证明"));
+                valueLines.add(firstLine);
+                valueLines.add("劳动合同的证明");
+                String threeLine = paragraphs[0].substring(paragraphs[0].indexOf("劳动合同的证明")+7) + "。" + paragraphs[1] + "。";
+                valueLines.add(threeLine);
+                String sevenLine = paragraphs[2] + "。";
+                valueLines.add(sevenLine);
+                String eightLine = paragraphs[3].substring(0,paragraphs[3].indexOf("章")+1);
+                valueLines.add(eightLine);
+                String nineLine = paragraphs[3].substring(paragraphs[3].indexOf("章")+1);
+                valueLines.add(nineLine);
+            }
+            paragraphs = valueLines.toArray(new String[0]);
+            if (null != paragraphs && paragraphs.length>0) {
+                for (int i = 0; i < paragraphs.length; i++) {
+
+                    // 当 i 等于 0 时设置特定样式
+                    if (i == 0 || i == 1) {
+                        if (i == 0) {
+                            // 创建空段落
+                            XWPFParagraph paragraph1 = doc.createParagraph();
+                            XWPFRun run1 = paragraph1.createRun();
+                            run1.setText("\u200B");
+                            run1.setFontSize(14); // 三号字体
+                            run1.setFontFamily("宋体"); // 黑体字体
+                        }
+
+                        // 创建段落
+                        XWPFParagraph paragraph = doc.createParagraph();
+                        XWPFRun run = paragraph.createRun();
+
+                        // 将 XML 元素的文本内容写入 Word 文档
+                        run.setText(paragraphs[i]);
+
+                        run.setFontSize(18); // 小二
+                        run.setBold(true); // 加粗
+                        run.setFontFamily("黑体"); // 黑体字体
+                        // 设置段落对齐方式为居中
+                        paragraph.setAlignment(ParagraphAlignment.CENTER);
+                        // 设置行距为单倍行距(240)
+                        paragraph.setSpacingBetween(1d, LineSpacingRule.AUTO);
+                    }
+                    if (i==2){
+                        // 创建空段落
+                        XWPFParagraph paragraph1 = doc.createParagraph();
+                        XWPFRun run1 = paragraph1.createRun();
+                        run1.setText("\u200B");
+                        run1.setFontSize(16); // 三号字体
+                        run1.setFontFamily("黑体"); // 黑体字体
+
+                        // 创建段落
+                        XWPFParagraph paragraph = doc.createParagraph();
+                        XWPFRun run = paragraph.createRun();
+
+                        // 将 XML 元素的文本内容写入 Word 文档
+//                        run.setText(paragraphs[i]);
+
+                        run.setFontSize(14); // 四号字体
+                        run.setFontFamily("宋体"); // 黑体字体
+                        // 设置行距为32磅固定值
+                        paragraph.setSpacingBetween(32, LineSpacingRule.EXACT);
+                        // 设置首行缩进两个字符
+                        paragraph.setIndentationFirstLine(600);
+
+                        String text = paragraphs[i];
+                        // 找到日期范围的起始和结束位置
+                        int startIndex = text.indexOf("合同为")+3;
+                        int endIndex = text.indexOf("。现因个人原因");
+
+                        int startIndex2 = text.indexOf(",自") + 2;
+                        int endIndex2 = text.indexOf("起与");
+                        if (startIndex != -1 && endIndex != -1) {
+                            // 在日期范围内添加下划线
+                            String beforeText = text.substring(0, startIndex);
+                            String underlinedText = text.substring(startIndex, endIndex);
+//                            String afterText = text.substring(endIndex);
+
+                            String beforeText2 = text.substring(endIndex,startIndex2);
+                            String underlinedText2 = text.substring(startIndex2, endIndex2);
+                            String afterText2 = text.substring(endIndex2);
+
+                            XWPFRun runBefore = paragraph.createRun();
+                            runBefore.setFontSize(14); // 四号字体
+                            runBefore.setFontFamily("宋体"); // 黑体字体
+                            runBefore.setText(beforeText);
+
+                            XWPFRun runUnderlined = paragraph.createRun();
+                            runUnderlined.setText(underlinedText);
+                            runUnderlined.setFontSize(14); // 四号字体
+                            runUnderlined.setFontFamily("宋体"); // 宋体字体
+                            runUnderlined.setUnderline(UnderlinePatterns.SINGLE);
+
+                            XWPFRun runBefore2 = paragraph.createRun();
+                            runBefore2.setFontSize(14); // 四号字体
+                            runBefore2.setFontFamily("宋体"); // 黑体字体
+                            runBefore2.setText(beforeText2);
+
+                            XWPFRun runUnderlined2 = paragraph.createRun();
+                            runUnderlined2.setText(underlinedText2);
+                            runUnderlined2.setFontSize(14); // 四号字体
+                            runUnderlined2.setFontFamily("宋体"); // 宋体字体
+                            runUnderlined2.setUnderline(UnderlinePatterns.SINGLE);
+
+                            XWPFRun runAfter = paragraph.createRun();
+                            runAfter.setFontSize(14); // 四号字体
+                            runAfter.setFontFamily("宋体"); // 黑体字体
+                            runAfter.setText(afterText2);
+                        } else {
+                            // 如果没有找到指定的日期范围,直接将文本添加到文档中
+                            run.setText(text);
+                        }
+
+                    }
+                    if (i==3){
+                        // 创建空段落
+                        XWPFParagraph paragraph1 = doc.createParagraph();
+                        XWPFRun run1 = paragraph1.createRun();
+                        run1.setText("\u200B");
+                        run1.setFontSize(14); // 四号字体
+                        run1.setFontFamily("宋体"); // 黑体字体
+
+                        // 创建段落
+                        XWPFParagraph paragraph = doc.createParagraph();
+                        XWPFRun run = paragraph.createRun();
+
+                        // 将 XML 元素的文本内容写入 Word 文档
+                        run.setText(paragraphs[i]);
+
+                        run.setFontSize(14); // 四号字体
+                        run.setFontFamily("宋体"); // 黑体字体
+                        // 设置行距为32磅固定值
+                        paragraph.setSpacingBetween(32, LineSpacingRule.EXACT);
+                        // 设置首行缩进两个字符
+                        paragraph.setIndentationFirstLine(600);
+                    }
+                    if (i==4){
+                        // 创建空段落
+                        XWPFParagraph paragraph1 = doc.createParagraph();
+                        XWPFRun run1 = paragraph1.createRun();
+                        run1.setText("\u200B");
+                        run1.setFontSize(14); // 四号字体
+                        run1.setFontFamily("仿宋"); // 黑体字体
+
+                        // 创建空段落
+                        XWPFParagraph paragraph2 = doc.createParagraph();
+                        XWPFRun run2 = paragraph2.createRun();
+                        run2.setText("\u200B");
+                        run2.setFontSize(14); // 四号字体
+                        run2.setFontFamily("仿宋"); // 黑体字体
+
+                        // 创建段落
+                        XWPFParagraph paragraph = doc.createParagraph();
+                        XWPFRun run = paragraph.createRun();
+
+                        // 将 XML 元素的文本内容写入 Word 文档
+                        run.setText(paragraphs[i]);
+
+                        run.setFontSize(14); // 四号字体
+                        run.setFontFamily("仿宋"); // 黑体字体
+                        // 设置行距为25磅固定值
+                        paragraph.setSpacingBetween(25, LineSpacingRule.EXACT);
+                        // 设置首行缩进19个字符的宽度
+                        paragraph.setIndentationFirstLine(4800);
+                    }
+                    if (i == 5) {
+
+                        // 创建段落
+                        XWPFParagraph paragraph = doc.createParagraph();
+                        XWPFRun run = paragraph.createRun();
+
+                        // 将 XML 元素的文本内容写入 Word 文档
+                        run.setText(paragraphs[i]);
+
+                        run.setFontSize(14); // 四号字体
+                        run.setFontFamily("仿宋"); // 黑体字体
+                        // 设置行距为25磅固定值
+                        paragraph.setSpacingBetween(25, LineSpacingRule.EXACT);
+                        // 设置首行缩进19个字符的宽度
+                        paragraph.setIndentationFirstLine(5400);
+                    }
+                }
+            }
+
+            // 将文档内容写入文件
+            doc.write(out);
+            out.close();
+            doc.close();
+            return fileSavePath + fileSaveName;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return "";
+    }
+
+    //生成pdf文件
+    public String convertToPDF(Handover handover) {
+
+//        Handover handover = mapper.getById(handoverId);
+
+        Path inputFile = Paths.get(handover.getXmlFilePath());
+
+
+        //本地保存文件地址
+        String fileSavePath = null;
+        if(System.getProperty("os.name").toLowerCase().contains("win")){
+            fileSavePath = "D:/attachment-file/";
+        }else{
+            fileSavePath = "/attachment-file/";
+        }
+
+        fileSavePath = fileSavePath + handover.getName() +  "离职证明.pdf";
+
+        Path outputFile = Paths.get(fileSavePath);
+
+        try (PDDocument document = new PDDocument()) {
+            // 设置页面大小(例如A4)和边距
+            PDRectangle pageSize = PDRectangle.A4;
+            PDPage page = new PDPage(pageSize);
+            // 设置页边距
+            page.setMediaBox(new PDRectangle(pageSize.getWidth(), pageSize.getHeight()));
+            document.addPage(page);
+
+            try (PDPageContentStream contentStream = new PDPageContentStream(document, page)) {
+                renderXMLToPDF(inputFile, contentStream,document);
+            }
+
+            document.save(String.valueOf(outputFile));
+            System.out.println("文件转换为 PDF 成功:" + outputFile);
+            return fileSavePath;
+
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return "";
+    }
+
+    /**
+     *读取XML内容,并解析,提取<w:t>标签里面的文本内容,目前所知并没有直接将 XML 标记转换为 PDF 样式的简单方法,字体样式等无法直接转为PDF
+     * @param reader
+     * @param builder
+     * @return
+     * @throws IOException
+     * @throws SAXException
+     */
+    public static List<String> getValueList(BufferedReader reader, DocumentBuilder builder) throws IOException, SAXException {
+        StringBuilder xmlContent = new StringBuilder();
+        String line;
+        while ((line = reader.readLine()) != null) {
+
+            xmlContent.append(line);
+        }
+        // 解析XML内容
+        Document xmlDoc = builder.parse(new InputSource(new StringReader(xmlContent.toString())));
+        // 提取XML文档中的内容
+        NodeList textNodes = xmlDoc.getElementsByTagName("w:t");
+        StringBuilder extractedText = new StringBuilder();
+
+        for (int i = 0; i < textNodes.getLength(); i++) {
+            Node node = textNodes.item(i);
+            extractedText.append(node.getTextContent()).append("\n");
+
+        }
+
+        String[] lines = extractedText.toString().split("\n"); // 按换行符分割文本
+        return getList(lines,"为",4,"中华人民共和国劳动合同法",7);
+    }
+
+    /**
+     * 根据条件及在xml中相关联的文本内容所占行数拼接获取word中每行的文本信息  即完整的一行文本<w:r>标签个数  默认0开始
+     * @param lines
+     * @param name1
+     * @param num1
+     * @param name2
+     * @param num2
+     * @return
+     */
+    public static List<String> getList (String[] lines,String name1,int num1,String name2,int num2){
+        List<String> strings = new ArrayList<>();
+        String test = "";
+        int num = 0;
+        for (int i=0;i<lines.length;i++){
+            if (lines[i].equals(name1)){
+                for (int j=0;j<=num1;j++){
+                    if (j==0){
+                        test += lines[i+j] + " ";
+                    }else {
+                        test += lines[i+j];
+                    }
+
+                }
+//                test = lines[i] + " " + lines[i+1] + lines[i+2] + lines[i+3] + " " + lines[i+4];
+                strings.add(test);
+                test = "";
+                num = i+num1;
+            }else if (lines[i].contains(name2)){
+                for (int j=0;j<=num2;j++){
+                    test += lines[i+j];
+                }
+//                test = lines[i] + lines[i+1] + lines[i+2] + lines[i+3] + lines[i+4] + lines[i+5] + lines[i+6] + lines[i+7];
+                strings.add(test);
+                test = "";
+                num = i+num2;
+            }else if (num == 0){
+                strings.add(lines[i]);
+            } else if ( num != 0 & i>num){
+                strings.add(lines[i]);
+                num = 0;
+            }
+        }
+        return strings;
+    }
+
+    /**
+     * 将从XML文件中解析出来的文本信息,渲染到PDF中,并进行样式调整
+     * @param document
+     * @param strings
+     * @param font
+     * @param contentStream
+     * @param yCoordinate
+     * @param lineSpacing
+     * @throws IOException
+     */
+    public static void contentStreamSet(PDDocument document, List<String> strings, PDType0Font font, PDPageContentStream contentStream, float yCoordinate, float lineSpacing) throws IOException {
+        //用于文本居中显示
+        PDPage page = document.getPage(0); // 获取第一页(索引从0开始)
+        PDRectangle mediaBox = page.getMediaBox();
+        float pageWidth = mediaBox.getWidth(); // 获取页面宽度
+
+        // 手动绘制每一行文本到 PDF
+        for (String currentLine : strings) {
+            float textWidth = font.getStringWidth(currentLine) * 24 / 1000f;
+            contentStream.setFont(font, 18);
+            contentStream.setRenderingMode(RenderingMode.FILL);
+            float startX = (pageWidth - textWidth) / 2;
+            if (currentLine.contains("关于与")) {
+
+                contentStream.setFont(font, 24);
+                contentStream.setRenderingMode(RenderingMode.FILL_STROKE);
+                //设置文本显示位置
+                contentStream.setTextMatrix(Matrix.getTranslateInstance(startX, yCoordinate));
+                contentStream.showText(currentLine);
+                yCoordinate -= lineSpacing +10; // 换行显示第二个数据
+            } else if (currentLine.contains("劳动合同的证明")){
+                contentStream.setFont(font, 24);
+                contentStream.setRenderingMode(RenderingMode.FILL_STROKE);
+                contentStream.setTextMatrix(Matrix.getTranslateInstance(startX, yCoordinate));
+                contentStream.showText(currentLine);
+                yCoordinate -= lineSpacing + 20; // 换行显示第二个数据
+            } else if (currentLine.contains("最后一期")){
+                String indentedText = "    " + currentLine;
+                contentStream.setTextMatrix(Matrix.getTranslateInstance(60, yCoordinate));
+                contentStream.showText(indentedText);
+                yCoordinate -= lineSpacing; // 换行显示第二个数据
+            } else if (currentLine.contains("解除劳动合同")){
+                contentStream.setTextMatrix(Matrix.getTranslateInstance(60, yCoordinate));
+                contentStream.showText(currentLine);
+                yCoordinate -= lineSpacing + 20; // 换行显示第二个数据
+            } else if (currentLine.contains("仲裁委员会")){
+                String indentedText = "    " + currentLine;
+                contentStream.setTextMatrix(Matrix.getTranslateInstance(60, yCoordinate));
+                contentStream.showText(indentedText);
+                yCoordinate -= lineSpacing + 20; // 换行显示第二个数据
+            } else if (currentLine.contains("单位盖章")){
+                String indentedText = "                                " + currentLine;
+                contentStream.setTextMatrix(Matrix.getTranslateInstance(60, yCoordinate));
+                contentStream.showText(indentedText);
+                yCoordinate -= lineSpacing + 10; // 换行显示第二个数据
+            } else if (currentLine.equals(strings.get(strings.size()-1))){
+                String indentedText = "                                    " + currentLine;
+                contentStream.setTextMatrix(Matrix.getTranslateInstance(60, yCoordinate));
+                contentStream.showText(indentedText);
+                yCoordinate -= lineSpacing; // 换行显示第二个数据
+            } else {
+                contentStream.setTextMatrix(Matrix.getTranslateInstance(60, yCoordinate));
+                contentStream.showText(currentLine);
+                yCoordinate -= lineSpacing; // 换行显示第二个数据
+            }
+            contentStream.newLineAtOffset(0, -15);
+        }
+    }
+
+    // XML解析
+    private static void renderXMLToPDF(Path inputFile, PDPageContentStream contentStream, PDDocument document) throws IOException {
+        try (BufferedReader reader = Files.newBufferedReader(inputFile, StandardCharsets.UTF_8)) {
+            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+            DocumentBuilder builder = factory.newDocumentBuilder();
+
+            List<String> strings = getValueList(reader,builder);
+
+            float lineSpacing = 25;  //行间距
+            float yCoordinate = 800; // 起始y坐标
+
+            contentStream.beginText();
+            contentStream.newLineAtOffset(60, yCoordinate);
+
+            String fileSavePath = null;
+            if(System.getProperty("os.name").toLowerCase().contains("win")){
+                fileSavePath = "C:/Windows/Fonts/";
+            }else{
+                fileSavePath = "/Library/Application Support/WPS Office/Fonts";
+            }
+
+            PDType0Font font = PDType0Font.load(document, new File(fileSavePath + "simfang.ttf"));
+
+            contentStreamSet(document,strings,font,contentStream,yCoordinate,lineSpacing);
+
+            contentStream.endText();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
 }

+ 76 - 9
jeeplus-modules/jeeplus-human/src/main/java/com/jeeplus/human/enrollment/enrollmentRegistration/controller/EnrollmentRegistrationController.java

@@ -1,30 +1,51 @@
 package com.jeeplus.human.enrollment.enrollmentRegistration.controller;
 
-import cn.hutool.extra.spring.SpringUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.jeeplus.common.utils.ResponseUtil;
-import com.jeeplus.flowable.feign.IFlowableApi;
+import com.jeeplus.human.depart.handover.domain.Handover;
+import com.jeeplus.human.depart.handover.service.HandoverService;
 import com.jeeplus.human.enrollment.enrollmentRegistration.domain.*;
 import com.jeeplus.human.enrollment.enrollmentRegistration.service.*;
-import com.jeeplus.human.practice.register.service.dto.RegistrationDto;
+import com.jeeplus.human.enrollment.enrollmentRegistration.utils.HunamFreemarkerUtil;
 import com.jeeplus.logging.annotation.ApiLog;
 import com.jeeplus.logging.constant.enums.LogTypeEnum;
 import freemarker.template.Configuration;
 import freemarker.template.Template;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.apache.pdfbox.pdmodel.PDDocument;
+import org.apache.pdfbox.pdmodel.PDPage;
+import org.apache.pdfbox.pdmodel.PDPageContentStream;
+import org.apache.pdfbox.pdmodel.common.PDRectangle;
+import org.apache.pdfbox.pdmodel.font.PDType0Font;
+import org.apache.pdfbox.pdmodel.graphics.state.RenderingMode;
+import org.apache.pdfbox.util.Matrix;
+import org.apache.poi.xwpf.usermodel.XWPFDocument;
+import org.apache.poi.xwpf.usermodel.XWPFParagraph;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
 
 import javax.annotation.Resource;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
-import java.io.File;
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.UUID;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import java.io.*;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
+import java.time.LocalDate;
+import java.util.*;
 
 /**
  * @author 王强
@@ -51,9 +72,11 @@ public class EnrollmentRegistrationController {
     @Resource
     private EnrollmentRiceCardService riceCardService;
 
+    @Resource
+    private HandoverService handoverService;
+
     /**
      * 下载门禁卡开通注意事项
-     * 下载门禁卡开通注意事项
      * @param response
      */
     @RequestMapping(value="downloadFile")
@@ -105,6 +128,50 @@ public class EnrollmentRegistrationController {
     }
 
     /**
+     * 下载离职证明
+     * @param response
+     */
+    @RequestMapping(value="downloadDepartFile")
+    @ResponseBody
+    public void downloadDepartFile(HttpServletResponse response,String handoverId)  {
+
+        //根据离职交接表id获取  离职证明文件路径信息
+        Handover handover = handoverService.getById(handoverId);
+
+        //下载文件地址
+        String filePath = handover.getWordFilePath();
+
+        try {
+            File docFile = new File(filePath);
+            if (docFile.exists()) {
+                // 设置响应头部信息
+                response.setContentType("application/pdf");
+                response.setHeader("Content-Disposition", "attachment; filename=" + docFile.getName());
+                response.setContentLength((int) docFile.length());
+
+                // 读取文件内容并写入响应输出流
+                FileInputStream fis = new FileInputStream(docFile);
+                BufferedInputStream bis = new BufferedInputStream(fis);
+                ServletOutputStream sos = response.getOutputStream();
+
+                byte[] buffer = new byte[1024];
+                int bytesRead;
+                while ((bytesRead = bis.read(buffer, 0, 1024)) != -1) {
+                    sos.write(buffer, 0, bytesRead);
+                }
+
+                sos.flush();
+                sos.close();
+                bis.close();
+                fis.close();
+            }
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
      * 查询入职人员登记信息列表
      * @param projectReportData
      * @param page

+ 25 - 0
jeeplus-modules/jeeplus-human/src/main/java/com/jeeplus/human/enrollment/enrollmentRegistration/utils/HunamFreemarkerUtil.java

@@ -0,0 +1,25 @@
+package com.jeeplus.human.enrollment.enrollmentRegistration.utils;
+
+import freemarker.template.Template;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+import java.util.Map;
+
+public class HunamFreemarkerUtil {
+    public static void generateFile(Map<?, ?> dataMap, Template template, File file){
+
+        Template t = template;
+        try {
+            // 这个地方不能使用FileWriter因为需要指定编码类型否则生成的Word文档会因为有无法识别的编码而无法打开
+            Writer w = new OutputStreamWriter(new FileOutputStream(file), "UTF-8");
+            t.process(dataMap, w);
+            w.close();
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new RuntimeException(ex);
+        }
+    }
+}

+ 50 - 0
jeeplus-modules/jeeplus-human/src/main/resources/bootstrap.yml

@@ -100,3 +100,53 @@ config:
 aliyun_directory: attachment-file/assess
 #签章阿里云文件bucketName
 qzBucketName: xg-qz
+#文件存储位置
+directory: /attachment-file
+
+
+#192.168.2.6签章测试参数
+apptoken: uIJQmTwyGJ
+appsecret: 2NMBqFigKoInmd43Wohxv5aEDKiiHo
+signature: 232a44ee9ebd251d119f0a65628f678e
+
+signature_http_top: http://192.168.2.130:9182
+#signature_http_top: https://3m0m810894.goho.co
+
+#竖版模板templateId
+vertical_templateId: 2894156236229259396
+#横板模板templateId
+across_templateId: 2894156210627227768
+#公司圆章
+company_round_seal_id: 2894161942659543252
+#公司圆章-竖
+company_round_seal_id_vertical: 2898043523878957918
+#公司方章
+company_parties_seal_id: 2894163220106129636
+#审定单用印流程id
+approval_category_id: 3032265972836684447
+#报告用印流程id
+report_category_id: 2895618951099527314
+##审定内用印流程id
+judgement_category_id: 2920938119742709765
+#审定单用印流程id(盐城)
+approval_YC_category_id: 2932214418853044239
+#报告用印流程id(盐城)
+report_YC_category_id: 2933233458312618324
+
+#验证码发送相关参数
+rong_userid: 8a216da86715511501673e331c24171e
+rong_token: 3d7dc58c6a334ad6887317efbf847e41
+app_id: 8a216da86715511501673e331c741725
+template_id: 435329
+code_type: 1
+
+#其他系统的地址
+CCPM_PATH:  http://localhost:8090
+#待办中展示其他系统的流程
+#ccpm =》 13、102 报销申请、39 项目登记
+CCPM_TASK:  13,102,39
+
+#各服务引用状态 =》 (若包含,则进行获取该服务的流程信息)
+INQUIRE_STATUS: ccpm
+
+CAS_PATH: http://www.casserver.com:8443

+ 935 - 0
jeeplus-modules/jeeplus-human/src/main/resources/freemarker/departProve.ftl

@@ -0,0 +1,935 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<?mso-application progid="Word.Document"?>
+<w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml" xmlns:v="urn:schemas-microsoft-com:vml"
+                xmlns:w10="urn:schemas-microsoft-com:office:word"
+                xmlns:sl="http://schemas.microsoft.com/schemaLibrary/2003/core"
+                xmlns:aml="http://schemas.microsoft.com/aml/2001/core"
+                xmlns:wx="http://schemas.microsoft.com/office/word/2003/auxHint"
+                xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"
+                w:macrosPresent="no" w:embeddedObjPresent="no" w:ocxPresent="no" xml:space="preserve"
+                xmlns:wpsCustomData="http://www.wps.cn/officeDocument/2013/wpsCustomData">
+    <w:fonts>
+        <w:defaultFonts w:ascii="Calibri" w:fareast="宋体" w:h-ansi="Calibri" 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="Auto"/>
+            <w:pitch w:val="Default"/>
+            <w:sig w:usb-0="E0002EFF" w:usb-1="C000785B" w:usb-2="00000009" w:usb-3="00000000" w:csb-0="400001FF"
+                   w:csb-1="FFFF0000"/>
+        </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="Default"/>
+            <w:sig w:usb-0="00000203" w:usb-1="288F0000" w:usb-2="00000006" w:usb-3="00000000" w:csb-0="00040001"
+                   w:csb-1="00000000"/>
+        </w:font>
+        <w:font w:name="Wingdings">
+            <w:panose-1 w:val="05000000000000000000"/>
+            <w:charset w:val="02"/>
+            <w:family w:val="Auto"/>
+            <w:pitch w:val="Default"/>
+            <w:sig w:usb-0="00000000" w:usb-1="00000000" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="80000000"
+                   w:csb-1="00000000"/>
+        </w:font>
+        <w:font w:name="Arial">
+            <w:panose-1 w:val="020B0604020202020204"/>
+            <w:charset w:val="01"/>
+            <w:family w:val="SWiss"/>
+            <w:pitch w:val="Default"/>
+            <w:sig w:usb-0="E0002EFF" w:usb-1="C000785B" w:usb-2="00000009" w:usb-3="00000000" w:csb-0="400001FF"
+                   w:csb-1="FFFF0000"/>
+        </w:font>
+        <w:font w:name="黑体">
+            <w:panose-1 w:val="02010609060101010101"/>
+            <w:charset w:val="86"/>
+            <w:family w:val="Auto"/>
+            <w:pitch w:val="Default"/>
+            <w:sig w:usb-0="800002BF" w:usb-1="38CF7CFA" w:usb-2="00000016" w:usb-3="00000000" w:csb-0="00040001"
+                   w:csb-1="00000000"/>
+        </w:font>
+        <w:font w:name="Courier New">
+            <w:panose-1 w:val="02070309020205020404"/>
+            <w:charset w:val="01"/>
+            <w:family w:val="Modern"/>
+            <w:pitch w:val="Default"/>
+            <w:sig w:usb-0="E0002EFF" w:usb-1="C0007843" w:usb-2="00000009" w:usb-3="00000000" w:csb-0="400001FF"
+                   w:csb-1="FFFF0000"/>
+        </w:font>
+        <w:font w:name="Symbol">
+            <w:panose-1 w:val="05050102010706020507"/>
+            <w:charset w:val="02"/>
+            <w:family w:val="Roman"/>
+            <w:pitch w:val="Default"/>
+            <w:sig w:usb-0="00000000" w:usb-1="00000000" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="80000000"
+                   w:csb-1="00000000"/>
+        </w:font>
+        <w:font w:name="Calibri">
+            <w:panose-1 w:val="020F0502020204030204"/>
+            <w:charset w:val="00"/>
+            <w:family w:val="SWiss"/>
+            <w:pitch w:val="Default"/>
+            <w:sig w:usb-0="E4002EFF" w:usb-1="C200247B" w:usb-2="00000009" w:usb-3="00000000" w:csb-0="200001FF"
+                   w:csb-1="00000000"/>
+        </w:font>
+        <w:font w:name="仿宋">
+            <w:panose-1 w:val="02010609060101010101"/>
+            <w:charset w:val="86"/>
+            <w:family w:val="Auto"/>
+            <w:pitch w:val="Default"/>
+            <w:sig w:usb-0="800002BF" w:usb-1="38CF7CFA" w:usb-2="00000016" w:usb-3="00000000" w:csb-0="00040001"
+                   w:csb-1="00000000"/>
+        </w:font>
+    </w:fonts>
+    <w:styles>
+        <w:latentStyles w:defLockedState="off" w:latentStyleCount="260">
+            <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="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="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="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="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:latentStyles>
+        <w:style w:type="paragraph" w:styleId="a1" w:default="on">
+            <w:name w:val="Normal"/>
+            <w:pPr>
+                <w:widowControl w:val="off"/>
+                <w:jc w:val="both"/>
+            </w:pPr>
+            <w:rPr>
+                <w:rFonts w:ascii="Calibri" w:h-ansi="Calibri" w:fareast="宋体" w:cs="Times New Roman" w:hint="default"/>
+                <w:kern w:val="2"/>
+                <w:sz w:val="21"/>
+                <w:sz-cs w:val="24"/>
+                <w:lang w:val="EN-US" w:fareast="ZH-CN" w:bidi="AR-SA"/>
+            </w:rPr>
+        </w:style>
+        <w:style w:type="character" w:styleId="a3" w:default="on">
+            <w:name w:val="Default Paragraph Font"/>
+            <w:semiHidden/>
+        </w:style>
+        <w:style w:type="table" w:styleId="a2" w:default="on">
+            <w:name w:val="Normal Table"/>
+            <w:semiHidden/>
+            <w:tblPr>
+                <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:styles>
+    <w:bgPict>
+        <w:background/>
+        <v:background id="_x0000_s1025">
+            <v:fill on="f" focussize="0,0"/>
+        </v:background>
+    </w:bgPict>
+    <w:docPr>
+        <w:view w:val="print"/>
+        <w:zoom w:percent="100"/>
+        <w:characterSpacingControl w:val="CompressPunctuation"/>
+        <w:documentProtection w:enforcement="off"/>
+        <w:punctuationKerning/>
+        <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:compat>
+            <w:adjustLineHeightInTable/>
+            <w:ulTrailSpace/>
+            <w:doNotExpandShiftReturn/>
+            <w:balanceSingleByteDoubleByteWidth/>
+            <w:useFELayout/>
+            <w:spaceForUL/>
+            <w:wrapTextWithPunct/>
+            <w:breakWrappedTables/>
+            <w:useAsianBreakRules/>
+            <w:dontGrowAutofit/>
+            <w:useFELayout/>
+        </w:compat>
+    </w:docPr>
+    <w:body>
+        <wx:sect>
+            <w:p>
+                <w:pPr>
+                    <w:jc w:val="both"/>
+                    <w:rPr>
+                        <w:rFonts w:ascii="宋体" w:h-ansi="宋体" w:fareast="宋体" w:cs="宋体" w:hint="fareast"/>
+                        <w:b/>
+                        <w:b-cs/>
+                        <w:i w:val="off"/>
+                        <w:i-cs w:val="off"/>
+                        <w:sz w:val="32"/>
+                        <w:sz-cs w:val="40"/>
+                        <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                    </w:rPr>
+                </w:pPr>
+            </w:p>
+            <w:p>
+                <w:pPr>
+                    <w:jc w:val="center"/>
+                    <w:rPr>
+                        <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="黑体" w:hint="fareast"/>
+                        <w:b/>
+                        <w:b-cs/>
+                        <w:i w:val="off"/>
+                        <w:i-cs w:val="off"/>
+                        <w:sz w:val="36"/>
+                        <w:sz-cs w:val="44"/>
+                        <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                    </w:rPr>
+                </w:pPr>
+                <w:r>
+                    <w:rPr>
+                        <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="黑体" w:hint="fareast"/>
+                        <w:b/>
+                        <w:b-cs/>
+                        <w:i w:val="off"/>
+                        <w:i-cs w:val="off"/>
+                        <w:sz w:val="36"/>
+                        <w:sz-cs w:val="44"/>
+                        <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                    </w:rPr>
+                    <w:t xml:space="preserve">关于与 ${userName} 解除</w:t>
+                </w:r>
+            </w:p>
+            <w:p>
+                <w:pPr>
+                    <w:jc w:val="center"/>
+                    <w:rPr>
+                        <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="黑体" w:hint="fareast"/>
+                        <w:b/>
+                        <w:b-cs/>
+                        <w:i w:val="off"/>
+                        <w:i-cs w:val="off"/>
+                        <w:sz w:val="32"/>
+                        <w:sz-cs w:val="40"/>
+                        <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                    </w:rPr>
+                </w:pPr>
+                <w:r>
+                    <w:rPr>
+                        <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="黑体" w:hint="fareast"/>
+                        <w:b/>
+                        <w:b-cs/>
+                        <w:i w:val="off"/>
+                        <w:i-cs w:val="off"/>
+                        <w:sz w:val="36"/>
+                        <w:sz-cs w:val="44"/>
+                        <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                    </w:rPr>
+                    <w:t>劳动合同的证明</w:t>
+                </w:r>
+            </w:p>
+            <w:p>
+                <w:pPr>
+                    <w:jc w:val="center"/>
+                    <w:rPr>
+                        <w:rFonts w:ascii="黑体" w:h-ansi="黑体" w:fareast="黑体" w:cs="黑体" w:hint="fareast"/>
+                        <w:b/>
+                        <w:b-cs/>
+                        <w:i w:val="off"/>
+                        <w:i-cs w:val="off"/>
+                        <w:sz w:val="32"/>
+                        <w:sz-cs w:val="40"/>
+                        <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                    </w:rPr>
+                </w:pPr>
+            </w:p>
+            <w:p>
+                <w:pPr>
+                    <w:keepNext w:val="off"/>
+                    <w:keepLines w:val="off"/>
+                    <w:pageBreakBefore w:val="off"/>
+                    <w:widowControl w:val="off"/>
+                    <w:kinsoku/>
+                    <w:wordWrap/>
+                    <w:overflowPunct/>
+                    <w:topLinePunct w:val="off"/>
+                    <w:autoSpaceDE/>
+                    <w:autoSpaceDN/>
+                    <w:adjustRightInd/>
+                    <w:snapToGrid/>
+                    <w:spacing w:line="640" w:line-rule="exact"/>
+                    <w:ind w:left="559" w:left-chars="266" w:first-line="1120" w:first-line-chars="200"/>
+                    <w:jc w:val="both"/>
+                    <w:textAlignment w:val="auto"/>
+                    <w:rPr>
+                        <w:rFonts w:ascii="宋体" w:h-ansi="宋体" w:fareast="宋体" w:cs="宋体" w:hint="fareast"/>
+                        <w:b w:val="off"/>
+                        <w:b-cs w:val="off"/>
+                        <w:i w:val="off"/>
+                        <w:i-cs w:val="off"/>
+                        <w:sz w:val="28"/>
+                        <w:sz-cs w:val="36"/>
+                        <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                    </w:rPr>
+                </w:pPr>
+                <w:r>
+                    <w:rPr>
+                        <w:rFonts w:ascii="宋体" w:h-ansi="宋体" w:fareast="宋体" w:cs="宋体" w:hint="fareast"/>
+                        <w:b w:val="off"/>
+                        <w:b-cs w:val="off"/>
+                        <w:i w:val="off"/>
+                        <w:i-cs w:val="off"/>
+                        <w:sz w:val="28"/>
+                        <w:sz-cs w:val="36"/>
+                        <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                    </w:rPr>
+                    <w:t xml:space="preserve"> ${userName},于</w:t>
+                </w:r>
+                <w:r>
+                    <w:rPr>
+                        <w:rFonts w:ascii="宋体" w:h-ansi="宋体" w:fareast="宋体" w:cs="宋体" w:hint="fareast"/>
+                        <w:b w:val="off"/>
+                        <w:b-cs w:val="off"/>
+                        <w:i w:val="off"/>
+                        <w:i-cs w:val="off"/>
+                        <w:sz w:val="28"/>
+                        <w:sz-cs w:val="36"/>
+                        <w:u w:val="none"/>
+                        <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                    </w:rPr>
+                    <w:t xml:space="preserve"> ${year}年 ${month}月 ${day}日</w:t>
+                </w:r>
+                <w:r>
+                    <w:rPr>
+                        <w:rFonts w:ascii="宋体" w:h-ansi="宋体" w:fareast="宋体" w:cs="宋体" w:hint="fareast"/>
+                        <w:b w:val="off"/>
+                        <w:b-cs w:val="off"/>
+                        <w:i w:val="off"/>
+                        <w:i-cs w:val="off"/>
+                        <w:sz w:val="28"/>
+                        <w:sz-cs w:val="36"/>
+                        <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                    </w:rPr>
+                    <w:t>进入本单位,最后一期劳动合同为</w:t>
+                </w:r>
+                <w:r>
+                    <w:rPr>
+                        <w:rFonts w:ascii="宋体" w:h-ansi="宋体" w:fareast="宋体" w:cs="宋体" w:hint="fareast"/>
+                        <w:b w:val="off"/>
+                        <w:b-cs w:val="off"/>
+                        <w:i w:val="off"/>
+                        <w:i-cs w:val="off"/>
+                        <w:sz w:val="28"/>
+                        <w:sz-cs w:val="36"/>
+                        <w:u w:val="single"/>
+                        <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                    </w:rPr>
+                    <w:t xml:space="preserve">${completeDay} 至 ${completeDay2}</w:t>
+                </w:r>
+                <w:r>
+                    <w:rPr>
+                        <w:rFonts w:ascii="宋体" w:h-ansi="宋体" w:fareast="宋体" w:cs="宋体" w:hint="fareast"/>
+                        <w:b w:val="off"/>
+                        <w:b-cs w:val="off"/>
+                        <w:i w:val="off"/>
+                        <w:i-cs w:val="off"/>
+                        <w:sz w:val="28"/>
+                        <w:sz-cs w:val="36"/>
+                        <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                    </w:rPr>
+                    <w:t>。现因</w:t>
+                </w:r>
+                <w:r>
+                    <w:rPr>
+                        <w:rFonts w:ascii="宋体" w:h-ansi="宋体" w:fareast="宋体" w:cs="宋体" w:hint="fareast"/>
+                        <w:b w:val="off"/>
+                        <w:b-cs w:val="off"/>
+                        <w:i w:val="off"/>
+                        <w:i-cs w:val="off"/>
+                        <w:sz w:val="28"/>
+                        <w:sz-cs w:val="36"/>
+                        <w:u w:val="single"/>
+                        <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                    </w:rPr>
+                    <w:t>个人</w:t>
+                </w:r>
+                <w:r>
+                    <w:rPr>
+                        <w:rFonts w:ascii="宋体" w:h-ansi="宋体" w:fareast="宋体" w:cs="宋体" w:hint="fareast"/>
+                        <w:b w:val="off"/>
+                        <w:b-cs w:val="off"/>
+                        <w:i w:val="off"/>
+                        <w:i-cs w:val="off"/>
+                        <w:color w:val="auto"/>
+                        <w:sz w:val="28"/>
+                        <w:sz-cs w:val="36"/>
+                        <w:u w:val="none"/>
+                        <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                    </w:rPr>
+                    <w:t>原因,提出辞职</w:t>
+                </w:r>
+                <w:r>
+                    <w:rPr>
+                        <w:rFonts w:ascii="宋体" w:h-ansi="宋体" w:fareast="宋体" w:cs="宋体" w:hint="fareast"/>
+                        <w:b w:val="off"/>
+                        <w:b-cs w:val="off"/>
+                        <w:i w:val="off"/>
+                        <w:i-cs w:val="off"/>
+                        <w:sz w:val="28"/>
+                        <w:sz-cs w:val="36"/>
+                        <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                    </w:rPr>
+                    <w:t>,依据《中华人民共和国劳动合同法》</w:t>
+                </w:r>
+                <w:r>
+                    <w:rPr>
+                        <w:rFonts w:ascii="宋体" w:h-ansi="宋体" w:fareast="宋体" w:cs="宋体" w:hint="fareast"/>
+                        <w:b w:val="off"/>
+                        <w:b-cs w:val="off"/>
+                        <w:i w:val="off"/>
+                        <w:i-cs w:val="off"/>
+                        <w:sz w:val="28"/>
+                        <w:sz-cs w:val="36"/>
+                        <w:u w:val="single"/>
+                        <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                    </w:rPr>
+                    <w:t>37</w:t>
+                </w:r>
+                <w:r>
+                    <w:rPr>
+                        <w:rFonts w:ascii="宋体" w:h-ansi="宋体" w:fareast="宋体" w:cs="宋体" w:hint="fareast"/>
+                        <w:b w:val="off"/>
+                        <w:b-cs w:val="off"/>
+                        <w:i w:val="off"/>
+                        <w:i-cs w:val="off"/>
+                        <w:sz w:val="28"/>
+                        <w:sz-cs w:val="36"/>
+                        <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                    </w:rPr>
+                    <w:t>条,自</w:t>
+                </w:r>
+                <w:r>
+                    <w:rPr>
+                        <w:rFonts w:ascii="宋体" w:h-ansi="宋体" w:fareast="宋体" w:cs="宋体" w:hint="fareast"/>
+                        <w:b w:val="off"/>
+                        <w:b-cs w:val="off"/>
+                        <w:i w:val="off"/>
+                        <w:i-cs w:val="off"/>
+                        <w:sz w:val="28"/>
+                        <w:sz-cs w:val="36"/>
+                        <w:u w:val="single"/>
+                        <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                    </w:rPr>
+                    <w:t></w:t>
+                </w:r>
+                <w:r>
+                    <w:rPr>
+                        <w:rFonts w:ascii="宋体" w:h-ansi="宋体" w:fareast="宋体" w:cs="宋体" w:hint="fareast"/>
+                        <w:b w:val="off"/>
+                        <w:b-cs w:val="off"/>
+                        <w:i w:val="off"/>
+                        <w:i-cs w:val="off"/>
+                        <w:sz w:val="28"/>
+                        <w:sz-cs w:val="36"/>
+                        <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                    </w:rPr>
+                    <w:t xml:space="preserve">${year2} 年</w:t>
+                </w:r>
+                <w:r>
+                    <w:rPr>
+                        <w:rFonts w:ascii="宋体" w:h-ansi="宋体" w:fareast="宋体" w:cs="宋体" w:hint="fareast"/>
+                        <w:b w:val="off"/>
+                        <w:b-cs w:val="off"/>
+                        <w:i w:val="off"/>
+                        <w:i-cs w:val="off"/>
+                        <w:sz w:val="28"/>
+                        <w:sz-cs w:val="36"/>
+                        <w:u w:val="single"/>
+                        <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                    </w:rPr>
+                    <w:t></w:t>
+                </w:r>
+                <w:r>
+                    <w:rPr>
+                        <w:rFonts w:ascii="宋体" w:h-ansi="宋体" w:fareast="宋体" w:cs="宋体" w:hint="fareast"/>
+                        <w:b w:val="off"/>
+                        <w:b-cs w:val="off"/>
+                        <w:i w:val="off"/>
+                        <w:i-cs w:val="off"/>
+                        <w:sz w:val="28"/>
+                        <w:sz-cs w:val="36"/>
+                        <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                    </w:rPr>
+                    <w:t xml:space="preserve"> ${month2}月</w:t>
+                </w:r>
+                <w:r>
+                    <w:rPr>
+                        <w:rFonts w:ascii="宋体" w:h-ansi="宋体" w:fareast="宋体" w:cs="宋体" w:hint="fareast"/>
+                        <w:b w:val="off"/>
+                        <w:b-cs w:val="off"/>
+                        <w:i w:val="off"/>
+                        <w:i-cs w:val="off"/>
+                        <w:sz w:val="28"/>
+                        <w:sz-cs w:val="36"/>
+                        <w:u w:val="single"/>
+                        <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                    </w:rPr>
+                    <w:t></w:t>
+                </w:r>
+                <w:r>
+                    <w:rPr>
+                        <w:rFonts w:ascii="宋体" w:h-ansi="宋体" w:fareast="宋体" w:cs="宋体" w:hint="fareast"/>
+                        <w:b w:val="off"/>
+                        <w:b-cs w:val="off"/>
+                        <w:i w:val="off"/>
+                        <w:i-cs w:val="off"/>
+                        <w:sz w:val="28"/>
+                        <w:sz-cs w:val="36"/>
+                        <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                    </w:rPr>
+                    <w:t xml:space="preserve">${day2}日起与 ${userName} 解除劳动合同。</w:t>
+                </w:r>
+            </w:p>
+            <w:p>
+                <w:pPr>
+                    <w:ind w:first-line="1120" w:first-line-chars="400"/>
+                    <w:jc w:val="both"/>
+                    <w:rPr>
+                        <w:rFonts w:ascii="宋体" w:h-ansi="宋体" w:fareast="宋体" w:cs="宋体" w:hint="fareast"/>
+                        <w:b w:val="off"/>
+                        <w:b-cs w:val="off"/>
+                        <w:i w:val="off"/>
+                        <w:i-cs w:val="off"/>
+                        <w:sz w:val="28"/>
+                        <w:sz-cs w:val="36"/>
+                        <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                    </w:rPr>
+                </w:pPr>
+            </w:p>
+            <w:p>
+                <w:pPr>
+                    <w:ind w:first-line="1120" w:first-line-chars="400"/>
+                    <w:jc w:val="both"/>
+                    <w:rPr>
+                        <w:rFonts w:ascii="宋体" w:h-ansi="宋体" w:fareast="宋体" w:cs="宋体" w:hint="fareast"/>
+                        <w:b w:val="off"/>
+                        <w:b-cs w:val="off"/>
+                        <w:i w:val="off"/>
+                        <w:i-cs w:val="off"/>
+                        <w:sz w:val="28"/>
+                        <w:sz-cs w:val="36"/>
+                        <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                    </w:rPr>
+                </w:pPr>
+                <w:r>
+                    <w:rPr>
+                        <w:rFonts w:ascii="宋体" w:h-ansi="宋体" w:fareast="宋体" w:cs="宋体" w:hint="fareast"/>
+                        <w:b w:val="off"/>
+                        <w:b-cs w:val="off"/>
+                        <w:i w:val="off"/>
+                        <w:i-cs w:val="off"/>
+                        <w:sz w:val="28"/>
+                        <w:sz-cs w:val="36"/>
+                        <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                    </w:rPr>
+                    <w:t>如对本证明有异议,可向劳动争议仲裁委员会申请仲裁。</w:t>
+                </w:r>
+            </w:p>
+            <w:p>
+                <w:pPr>
+                    <w:jc w:val="both"/>
+                    <w:rPr>
+                        <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:cs="仿宋" w:hint="fareast"/>
+                        <w:b w:val="off"/>
+                        <w:b-cs w:val="off"/>
+                        <w:i w:val="off"/>
+                        <w:i-cs w:val="off"/>
+                        <w:sz w:val="24"/>
+                        <w:sz-cs w:val="32"/>
+                        <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                    </w:rPr>
+                </w:pPr>
+            </w:p>
+            <w:p>
+                <w:pPr>
+                    <w:jc w:val="both"/>
+                    <w:rPr>
+                        <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:cs="仿宋" w:hint="fareast"/>
+                        <w:b w:val="off"/>
+                        <w:b-cs w:val="off"/>
+                        <w:i w:val="off"/>
+                        <w:i-cs w:val="off"/>
+                        <w:sz w:val="24"/>
+                        <w:sz-cs w:val="32"/>
+                        <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                    </w:rPr>
+                </w:pPr>
+            </w:p>
+            <w:p>
+                <w:pPr>
+                    <w:jc w:val="both"/>
+                    <w:rPr>
+                        <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:cs="仿宋" w:hint="fareast"/>
+                        <w:b w:val="off"/>
+                        <w:b-cs w:val="off"/>
+                        <w:i w:val="off"/>
+                        <w:i-cs w:val="off"/>
+                        <w:sz w:val="24"/>
+                        <w:sz-cs w:val="32"/>
+                        <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                    </w:rPr>
+                </w:pPr>
+            </w:p>
+            <w:p>
+                <w:pPr>
+                    <w:jc w:val="both"/>
+                    <w:rPr>
+                        <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:cs="仿宋" w:hint="fareast"/>
+                        <w:b w:val="off"/>
+                        <w:b-cs w:val="off"/>
+                        <w:i w:val="off"/>
+                        <w:i-cs w:val="off"/>
+                        <w:sz w:val="24"/>
+                        <w:sz-cs w:val="32"/>
+                        <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                    </w:rPr>
+                </w:pPr>
+            </w:p>
+            <w:p>
+                <w:pPr>
+                    <w:keepNext w:val="off"/>
+                    <w:keepLines w:val="off"/>
+                    <w:pageBreakBefore w:val="off"/>
+                    <w:widowControl w:val="off"/>
+                    <w:kinsoku/>
+                    <w:wordWrap/>
+                    <w:overflowPunct/>
+                    <w:topLinePunct w:val="off"/>
+                    <w:autoSpaceDE/>
+                    <w:autoSpaceDN/>
+                    <w:adjustRightInd/>
+                    <w:snapToGrid/>
+                    <w:spacing w:line="500" w:line-rule="exact"/>
+                    <w:ind w:first-line="5320" w:first-line-chars="1900"/>
+                    <w:jc w:val="both"/>
+                    <w:textAlignment w:val="auto"/>
+                    <w:rPr>
+                        <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:cs="仿宋" w:hint="fareast"/>
+                        <w:b w:val="off"/>
+                        <w:b-cs w:val="off"/>
+                        <w:i w:val="off"/>
+                        <w:i-cs w:val="off"/>
+                        <w:sz w:val="28"/>
+                        <w:sz-cs w:val="36"/>
+                        <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                    </w:rPr>
+                </w:pPr>
+                <w:r>
+                    <w:rPr>
+                        <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:cs="仿宋" w:hint="fareast"/>
+                        <w:b w:val="off"/>
+                        <w:b-cs w:val="off"/>
+                        <w:i w:val="off"/>
+                        <w:i-cs w:val="off"/>
+                        <w:sz w:val="28"/>
+                        <w:sz-cs w:val="36"/>
+                        <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                    </w:rPr>
+                    <w:t>单位盖章</w:t>
+                </w:r>
+            </w:p>
+            <w:p>
+                <w:pPr>
+                    <w:keepNext w:val="off"/>
+                    <w:keepLines w:val="off"/>
+                    <w:pageBreakBefore w:val="off"/>
+                    <w:widowControl w:val="off"/>
+                    <w:kinsoku/>
+                    <w:wordWrap/>
+                    <w:overflowPunct/>
+                    <w:topLinePunct w:val="off"/>
+                    <w:autoSpaceDE/>
+                    <w:autoSpaceDN/>
+                    <w:adjustRightInd/>
+                    <w:snapToGrid/>
+                    <w:spacing w:line="500" w:line-rule="exact"/>
+                    <w:ind w:first-line="6160" w:first-line-chars="2150"/>
+                    <w:jc w:val="both"/>
+                    <w:textAlignment w:val="auto"/>
+                    <w:rPr>
+                        <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:cs="仿宋" w:hint="default"/>
+                        <w:b w:val="off"/>
+                        <w:b-cs w:val="off"/>
+                        <w:i w:val="off"/>
+                        <w:i-cs w:val="off"/>
+                        <w:sz w:val="28"/>
+                        <w:sz-cs w:val="36"/>
+                        <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                    </w:rPr>
+                </w:pPr>
+                <w:r>
+                    <w:rPr>
+                        <w:rFonts w:ascii="仿宋" w:h-ansi="仿宋" w:fareast="仿宋" w:cs="仿宋" w:hint="fareast"/>
+                        <w:b w:val="off"/>
+                        <w:b-cs w:val="off"/>
+                        <w:i w:val="off"/>
+                        <w:i-cs w:val="off"/>
+                        <w:sz w:val="28"/>
+                        <w:sz-cs w:val="36"/>
+                        <w:lang w:val="EN-US" w:fareast="ZH-CN"/>
+                    </w:rPr>
+                    <w:t xml:space="preserve">${year2}年${month2}月${day2}日</w:t>
+                </w:r>
+            </w:p>
+            <w:sectPr>
+                <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="720"/>
+                <w:docGrid w:type="lines" w:line-pitch="312"/>
+            </w:sectPr>
+        </wx:sect>
+    </w:body></w:wordDocument>