IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> java 导出自定义Word -> 正文阅读

[Java知识库]java 导出自定义Word

Controller代码

@PostMapping(value = "/exportWordDilreport")
? ? @ApiOperation(httpMethod = "POST", value = "导出演练报告")
? ? public Wrapper exportWordDilreport(@RequestHeader("token") String token,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?@RequestBody DilreportSelDto dilreportDto,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?HttpServletRequest request, HttpServletResponse response) throws Exception{

? ? ? ? log.info("------------------- 演练报告下载BEGIN ---------------------------");
? ? ? ? Wrapper wrapper = dilreportService.exportWordDilreport(token,dilreportDto);
? ? ? ? if (wrapper.getCode() == 200) {
? ? ? ? ? ? // 上传文件FTP 返回路径
? ? ? ? ? ? String title = wrapper.getResult().toString();
? ? ? ? ? ? return dilreportService.uploadWordFile(token,wrapper.getMessage(),title);
? ? ? ? }
? ? ? ? log.info("------------------- 演练报告下载END ---------------------------");
? ? ? ? // 删除下载过的文件,不占用资源
? ? ? ? dilreportService.delFiles(token);
? ? ? ? return wrapper;
? ? }

业务层代码

@Override
    public Wrapper exportWordDilreport(String token, DilreportSelDto dilreportDto) throws Exception{
        // 创建一个文档(
        Document document = new Document(PageSize.A4);//设置纸张大小
        createFile();   // 创建文件夹
        String downUrl = pemBusinessProperties.getWordFile()+"DILRE" + System.currentTimeMillis() + ".doc";      // 服务器需要下载的地址
        //String downUrl = "F:\\word测试\\dilreword\\DILRE" + System.currentTimeMillis() + ".doc";        // 本地需要下载的地址

        // 查询演练报告
        DilreportDto dto = new DilreportDto();
        dto.setTaskId(dilreportDto.getTaskId());
        DilreportVo dilreportVo = new DilreportVo();
        Wrapper wrapper = selectDilreport(token,dto);
        if(null != wrapper) {
            dilreportVo = (DilreportVo) wrapper.getResult();
            if(null != dilreportVo) {
                //try {
                // 查询实操记录
                SelRelationDto selRelationDto = new SelRelationDto();
                selRelationDto.setTaskId(dilreportDto.getTaskId());
                ReportRelationVo reportRelationVo = new ReportRelationVo();
                Wrapper relationWrapper = selectRelationInfo(token,selRelationDto);
                if(null != relationWrapper) {
                    reportRelationVo = (ReportRelationVo) relationWrapper.getResult();
                }

                RtfWriter2.getInstance(document, new FileOutputStream(downUrl));
                //打开word进行填充数据
                document.open();

                Font font10 = FontFactory.getFont("STSong-Light", "Cp1252", 5);         // 通用
                font10.setSize(12);
                font10.setStyle("bold");      // normal  bold  italic oblique  underline line-through
                Font font8 = FontFactory.getFont("STSong-Light", "Cp1252", 5);          // 通用
                font8.setSize(12);

                Paragraph paragraph = new Paragraph(dilreportVo.getReportTitle());
                paragraph.setSpacingBefore(15);
                paragraph.setAlignment(Element.ALIGN_CENTER);      // 居中
                Font font = FontFactory.getFont("STSong-Light", "Cp1252", 5);
                font.setSize(14);
                paragraph.setFont(font);
                document.add(paragraph);

                //创建表格
                Table table = new Table(3);
                table.setWidth(100);
                table.setPadding(5);
                table.setBorder(0);
                table.setBorderColor(Color.WHITE);

                //常见单元格填充图片
                Paragraph paragraph1 = new Paragraph("应急演练", font10);
                paragraph1.setSpacingBefore(10);
                Cell cell1 = getColRowCell(paragraph1);
                table.addCell(cell1, 0, 0);

                Paragraph paragraph2 = getContentSpacingParagraph("演练名称:" + dilreportVo.getDilName(), font8);
                Cell cell2 = getCell(paragraph2);   // 封装通用
                table.addCell(cell2, 3, 0);

                // 将日期格式化
                //String practicalDate = PemDateUtils.getDateAssStrFormat(dilreportVo.getPracticalDate());
                Paragraph paragraph21 = getContentSpacingParagraph("日期:" + dilreportVo.getPracticalDate(), font8);
                Cell cell21 = getCell(paragraph21);   // 封装通用
                table.addCell(cell21, 3, 1);

                Paragraph paragraph22 = getContentSpacingParagraph("起止时间:" + dilreportVo.getStartTime()+"-"+dilreportVo.getEndTime(), font8);
                Cell cell22 = getCell(paragraph22);   // 封装通用
                table.addCell(cell22, 3, 2);

                Paragraph paragraph3 = getContentSpacingParagraph("演练目的:" + dilreportVo.getDilPurposes(), font8);
                Cell cell3 = getCell(paragraph3);   // 封装通用
                table.addCell(cell3, 4, 0);

                Paragraph paragraph31 = getContentSpacingParagraph("演练地点:" + dilreportVo.getPracticalAddress(), font8);
                Cell cell31 = getCell(paragraph31);   // 封装
Paragraph paragraph32 = getContentSpacingParagraph("演练部门/人:" + dilreportVo.getPracticalUserDept(), font8);
                Cell cell32 = getCell(paragraph32);   // 封装通用
                table.addCell(cell32, 4, 2);

                //常见单元格填充图片
                Paragraph paragraph4 = getSpacingMaxParagraph("应急演练方案", font10);
                Cell cell4 = new Cell(paragraph4);
                cell4.setColspan(3);        // 跨列
                cell4.setBorder(0);
                table.addCell(cell4, 5, 0);
                cell4.setHorizontalAlignment(Element.ALIGN_CENTER);

                // 措施以及要求
                Paragraph paragraph6 = getSpacingMaxParagraph(dilreportVo.getProgTitle(), font10);
                paragraph6.setAlignment(Element.ALIGN_CENTER);      // 居中
                Cell cell6 = new Cell(paragraph6);                  // 中间部分整个内容
                cell6.setColspan(3);
                cell6.setBorder(0);

                // 一、演练目的
                Paragraph paragraph61 = getSpacingMaxParagraph("一、演练目的",font10);
                cell6.addElement(paragraph61);
                Paragraph context1 = assemblyParagraph(dilreportVo.getProgPurposes());     // 演练目的内容
                cell6.addElement(context1);

                // 二、组织架构
                Paragraph paragraph62 = getSpacingMaxParagraph("二、组织架构",font10);
                cell6.addElement(paragraph62);
                // 获取组内信息
                if(!CollectionUtils.isEmpty(dilreportVo.getGroupPojoList())){
                    int count = 0;      // ++ 表示 先算结果在输出
                    for(EmergencyGuidanceGroupPojo groupPojo : dilreportVo.getGroupPojoList()){
                        Paragraph groupNamePar = new Paragraph(++count + "、" + groupPojo.getGuidanceGroupName() + ":",font10);         // 救援组/指导组
                        groupNamePar.setIndentationLeft(5);
                        groupNamePar.setIndentationRight(5);
                        cell6.addElement(groupNamePar);
                        Paragraph context2 = new Paragraph( groupPojo.getGuidanceGroupDuty() + groupPojo.getRemark(),font8);         // 演练流程内容
                        context2.setIndentationLeft(15);
                        context2.setIndentationRight(15);
                        cell6.addElement(context2);
                    }
                }

                // 三、演练流程
                Paragraph paragraph63 = getSpacingMaxParagraph("三、演练流程",font10);
                cell6.addElement(paragraph63);
                Paragraph context3 = assemblyParagraph(dilreportVo.getProgProcess());    // 组装富文本
                cell6.addElement(context3);
                table.addCell(cell6, 6, 0);

                // 参加人员
                Paragraph paragraph7 = getSpacingMinParagraph("参加人员签到", font10);
                Cell cell7 = getColRowCell(paragraph7);
                table.addCell(cell7, 7, 0);

                // 参加人员
                Paragraph paragraph8 = getContentParagraph(reportRelationVo.getJoinUser(), font8);
                Cell cell8 = new Cell(paragraph8);
                cell8.setColspan(3);        // 跨列
                cell8.setRowspan(3);        // 跨行
                cell8.setBorder(0);
                table.addCell(cell8, 10, 0);

                // 演练情况记录
                Paragraph paragraph9 = getSpacingMinParagraph("演练情况记录", font10);
                Cell cell9 = getColRowCell(paragraph9);
                table.addCell(cell9, 13, 0);

                // 演练情况记录内容
                Paragraph paragraph10 = assemblyParagraph(reportRelationVo.getContent());
                Cell cell10 = new Cell(paragraph10);
                cell10 = getLeftParagraph("记录人:" + dilreportVo.getNoteUser(), font8, cell10);  // 追加段落
                table.addCell(cell10, 16, 0);

                // 演练总结
                Paragraph paragraph11 = getSpacingMinParagraph("演练总结", font10);
                Cell cell11 = getColRowCell(paragraph11);
                table.addCell(cell11, 19, 0);

                // 演练总结内容
                Paragraph paragraph12 = getContentParagraph(dilreportVo.getProgSummary(), font8);
                Cell cell13 = new Cell(paragraph12);
                cell13 = getLeftParagraph("记录人:" + dilreportVo.getSumingUser(), font8, cell13);  // 追加段落
                table.addCell(cell13, 22, 0);

                // 经理审核意见
                Paragraph paragraph14 = getContentParagraph(dilreportVo.getRevComment(),font8);
                Cell cell14 = new Cell(paragraph14);
                cell14 = getLeftManagerParagraph("经理审核意见:" + dilreportVo.getExamineUser(),font8,cell14);  // 追加段落
                table.addCell(cell14, 25, 0);

                // 将table加入文档中
                document.add(table);

                // 添加图片
                Paragraph paragraph15 = new Paragraph("应急演练照片", font10);
                paragraph15.setSpacingBefore(10);         // 段落下间距
                document.add(paragraph15);

                // 添加照片
                Table table1 = new Table(4);
                table1.setWidth(100);
                table1.setPadding(10);        // 设置列内容间距
                table1.setBorderColor(Color.WHITE);

                // 图片
                if(!CollectionUtils.isEmpty(dilreportVo.getCultivateEncList())){
                    String filename = "";       // 文件名称
                    for(CultivateEnc cultivateEnc : dilreportVo.getCultivateEncList()){
                       if(StringUtils.isNotEmpty(cultivateEnc.getFileUrl())){
                           // 获取文件名
                           filename = cultivateEnc.getFileUrl().substring(cultivateEnc.getFileUrl().lastIndexOf("/")+1);
                           // 获取文件前文件夹
                           String dateDir = cultivateEnc.getFileUrl().replace("//","/");
                           String [] dateDirs = dateDir.split("/");
                           dateDir =  "/" + dateDirs[3] + "/" + dateDirs[4] + "/" + dateDirs[5] + "/";
                           // 下载文件
                           ftpUtil.downloadFtpFile(dateDir,filename);
                        }
                        Image img = Image.getInstance(pemBusinessProperties.getPhotoUrl()+filename);
                        //Image img = Image.getInstance("F:\\word测试\\photo\\"+filename);
                        img.scaleAbsolute(120, 100);         // 设置图片大小
                        Cell cell = new Cell(img);
                        cell.setBorderColor(Color.WHITE);
                        cell.setHorizontalAlignment(Element.ALIGN_CENTER);
                        table1.addCell(cell);
                    }
                }
                document.add(table1);
// 关闭文档
                if (document != null) {
                    document.close();
                }
            }else{
                return WrapMapper.wrap(Wrapper.ERROR_CODE, "未查询到演练报告");
            }
        }
        return WrapMapper.wrap(Wrapper.SUCCESS_CODE, downUrl,dilreportVo.getReportTitle());
    }


@Override
    public Wrapper uploadWordFile(String token, String fileName,String title) throws Exception {
        // 上传文件至FTP 返回下载路径给前端下载
        File file = new File(fileName);       // 文件路径
        //InputStream inputStream = new FileInputStream(file);
        //String UUID = PubUtils.uuid();            // 生成UUID
        //String remoteFile = new StringBuffer(PemConstants.PEM_UPLODE_SUFFIX).append(UUID).append(FtpFileUtils.getFileType(file.getName())).toString();
        //String remoteFile = new StringBuffer(title).append(System.currentTimeMillis()).append(FtpFileUtils.getFileType(file.getName())).toString();
        //FtpClientTemplate.uploadFile(remoteFile, remoteDirectory, inputStream);        //上传文件
        // 调用文件上传API
        FileInputStream fileInputStream = new FileInputStream(file);
        MultipartFile multipartFile = new MockMultipartFile("file", file.getName(),
                ContentType.APPLICATION_OCTET_STREAM.toString(), fileInputStream);
        Wrapper<FileUploadVo> fileUploadVoWrapper = fileOperatorFeignApi.uploadFile(PemConstants.BEARER,token,remoteDirectory,multipartFile);
        if(null != fileUploadVoWrapper){
            FileUploadVo uploadVo = fileUploadVoWrapper.getResult();
            if(null != uploadVo){
                return WrapMapper.wrap(Wrapper.SUCCESS_CODE, uploadVo.getFileWebProxyUrl());
            }
        }
        //String fileUrl = FtpFileUtils.getFileUrl(remoteFile, remoteDirectory);
        return WrapMapper.ok();
    }

@Override
    public Wrapper delFiles(String token) throws Exception {
        // 文件地址
        String[] str = {pemBusinessProperties.getWordFile(), pemBusinessProperties.getPhotoUrl()};
        //String[] str = {"F:\\word测试\\dilreword\\", "F:\\word测试\\photo\\"};
        List<File> fileList = new ArrayList<>();
        for (int i = 0; i < str.length; i++) {
            fileList.add(new File(str[i]));
        }
        // 连续创建文件夹以及子集文件夹
        for (File file : fileList) {
            if (file.exists()) {
                File[] files = file.listFiles();       // 所有子集
                for (int i = 0; i < files.length; i++) {
                    if (files[i].exists()) {//删除子文件
                        files[i].delete();
                    }
                }
                file.delete();
            }
        }
        return WrapMapper.ok();
    }

/**
     * 创建文件所需文件夹
     */
    public void createFile() {
        // 文件地址
        String[] str = {pemBusinessProperties.getWordFile(), pemBusinessProperties.getPhotoUrl()};
        //String[] str = {"F:\\word测试\\dilreword\\", "F:\\word测试\\photo\\"};
        List<File> fileList = new ArrayList<>();
        for (int i = 0; i < str.length; i++) {
            fileList.add(new File(str[i]));
        }
        // 连续创建文件夹以及子集文件夹
        for (File file : fileList) {
            if (!file.exists()) {
                file.mkdirs();
            }
        }
    }


    /**
     * 组装富文本读取
     * @param content
     * @return
     * @throws IOException
     */
    public Paragraph assemblyParagraph(String content) throws IOException {
        Paragraph paragraph = new Paragraph();
        paragraph.setIndentationLeft(15);
        //paragraph.setIndentationRight(15);
        StyleSheet styleSheet = new StyleSheet();
        List contList = HTMLWorker.parseToList(new StringReader(content), styleSheet);
        for (int i = 0; i < contList.size(); i++) {
            Element e = (Element) contList.get(i);
            paragraph.add(e);
        }
        return paragraph;
    }

/**
     * 组装段落上下间距
     * @param str
     * @param font
     * @return
     */
    public Paragraph getContentSpacingParagraph(String str,Font font){
        Paragraph paragraph = new Paragraph(str,font);
        //paragraph.setSpacingBefore(2);
        return paragraph;
    }

    /**
     * 组装段落上下间距
     * @param str
     * @param font
     * @return
     */
    public Paragraph getSpacingMaxParagraph(String str,Font font){
        Paragraph paragraph = new Paragraph(str,font);
        paragraph.setSpacingAfter(10);
        paragraph.setSpacingBefore(10);
        return paragraph;
    }

    /**
     * 组装段落上下间距
     * @param str
     * @param font
     * @return
     */
    public Paragraph getSpacingMinParagraph(String str,Font font){
        Paragraph paragraph = new Paragraph(str,font);
        paragraph.setSpacingAfter(6);
        paragraph.setSpacingBefore(6);
        return paragraph;
    }

    /**
     * 组装段落左右间距
     * @param str
     * @param font
     * @return
     */
    public Cell getLeftParagraph(String str,Font font,Cell cell) throws BadElementException{
        Paragraph paragraph = new Paragraph(str,font);
        paragraph.setIndentationLeft(420);
        paragraph.setIndentationRight(15);
        //paragraph.setSpacingAfter(20);
        cell.addElement(paragraph);
        cell.setColspan(3);        // 跨列
        cell.setRowspan(3);        // 跨行
        cell.setBorder(0);
        return cell;
    }

    /**
     * 组装段落左右间距(经理审核意见)
     * @param str
     * @param font
     * @return
     */
    public Cell getLeftManagerParagraph(String str,Font font,Cell cell) throws BadElementException{
        Paragraph paragraph = new Paragraph(str,font);
        paragraph.setIndentationLeft(383);
        paragraph.setIndentationRight(15);
        //paragraph.setSpacingAfter(15);
        cell.addElement(paragraph);
        cell.setColspan(3);        // 跨列
        cell.setRowspan(3);        // 跨行
        cell.setBorder(0);
        return cell;
    }

    /**
     * 组装内容段落
     * @param str
     * @param font
     * @return
     */
    public Paragraph getContentParagraph(String str,Font font){
        Paragraph paragraph = new Paragraph(str,font);
        paragraph.setSpacingAfter(6);
        paragraph.setSpacingBefore(6);
        paragraph.setIndentationLeft(15);
        paragraph.setIndentationRight(15);
        return paragraph;
    }

    /**
     * 组装列(cell)
     * @param paragraph
     * @return
     */
    public Cell getColRowCell(Paragraph paragraph) throws BadElementException{
        Cell cell = new Cell(paragraph);
        cell.setColspan(3);        // 跨列
        cell.setRowspan(3);        // 跨行
        cell.setBorder(0);
        cell.setHorizontalAlignment(Element.ALIGN_CENTER);
        return cell;
    }

    /**
     * 组装列(cell)
     * @param paragraph
     * @return
     */
    public Cell getCell(Paragraph paragraph) throws BadElementException{
        //paragraph.setSpacingAfter(5);
        Cell cell = new Cell(paragraph);
        cell.setBorder(0);
        cell.setHorizontalAlignment(Element.ALIGN_CENTER);
        return cell;
    }

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-04-07 22:29:52  更:2022-04-07 22:32:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:33:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码