我的编程空间,编程开发者的网络收藏夹
学习永远不晚

spring boot实现自动输出word文档功能的实例代码

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

spring boot实现自动输出word文档功能的实例代码

spring boot实现自动输出word文档功能

本文用到Apache POI组件
组件依赖在pom.xml文件中添加


<dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>4.1.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>4.1.0</version>
        </dependency>

首先创建相关的实体类、编写需要用到的sql查询。


import lombok.Data;

// 选择题实体
@Data
public class MultiQuestion {
    private Integer questionId;

    private String subject;

    private String section;

    private String answerA;

    private String answerB;

    private String answerC;

    private String answerD;

    private String question;

    private String level;

    private String rightAnswer;

    private String analysis; //题目解析

    private Integer score;
 }

import lombok.Data;

//填空题实体类
@Data
public class FillQuestion {
    private Integer questionId;

    private String subject;

    private String question;

    private String answer;

    private Integer score;

    private String level;

    private String section;

    private String analysis; //题目解析
 }

import lombok.Data;

//判断题实体类
@Data
public class JudgeQuestion {
    private Integer questionId;

    private String subject;

    private String question;

    private String answer;

    private String level;

    private String section;

    private Integer score;

    private String analysis; //题目解析
}

创建好要用到的实体类之后,利用mybatis写sql查询,可以分为两种:1、配置mapper.xml文件路径,在xml文件中编写sql语句。2、直接使用注解。本文使用方法为第二种。


@Mapper
public interface MultiQuestionMapper {
    
    @Select("select * from multi_question where questionId in (select questionId from paper_manage where questionType = 1 and paperId = #{paperId})")
    List<MultiQuestion> findByIdAndType(Integer PaperId);

    @Select("select * from multi_question")
    IPage<MultiQuestion> findAll(Page page);

    
    @Select("select questionId from multi_question order by questionId desc limit 1")
    MultiQuestion findOnlyQuestionId();

    @Options(useGeneratedKeys = true,keyProperty = "questionId")
    @Insert("insert into multi_question(subject,question,answerA,answerB,answerC,answerD,rightAnswer,analysis,section,level) " +
            "values(#{subject},#{question},#{answerA},#{answerB},#{answerC},#{answerD},#{rightAnswer},#{analysis},#{section},#{level})")
    int add(MultiQuestion multiQuestion);

    @Select("select questionId from multi_question  where subject =#{subject} order by rand() desc limit #{pageNo}")
    List<Integer> findBySubject(String subject,Integer pageNo);


}

//填空题
@Mapper
public interface FillQuestionMapper {

    @Select("select * from fill_question where questionId in (select questionId from paper_manage where questionType = 2 and paperId = #{paperId})")
    List<FillQuestion> findByIdAndType(Integer paperId);

    @Select("select * from fill_question")
    IPage<FillQuestion> findAll(Page page);

    
    @Select("select questionId from fill_question order by questionId desc limit 1")
    FillQuestion findOnlyQuestionId();

    @Options(useGeneratedKeys = true,keyProperty ="questionId" )
    @Insert("insert into fill_question(subject,question,answer,analysis,level,section) values " +
            "(#{subject,},#{question},#{answer},#{analysis},#{level},#{section})")
    int add(FillQuestion fillQuestion);

    @Select("select questionId from fill_question where subject = #{subject} order by rand() desc limit #{pageNo}")
    List<Integer> findBySubject(String subject,Integer pageNo);
}

//判断题

@Mapper
public interface JudgeQuestionMapper {

    @Select("select * from judge_question where questionId in (select questionId from paper_manage where questionType = 3 and paperId = #{paperId})")
    List<JudgeQuestion> findByIdAndType(Integer paperId);

    @Select("select * from judge_question")
    IPage<JudgeQuestion> findAll(Page page);

    
    @Select("select questionId from judge_question order by questionId desc limit 1")
    JudgeQuestion findOnlyQuestionId();

    @Insert("insert into judge_question(subject,question,answer,analysis,level,section) values " +
            "(#{subject},#{question},#{answer},#{analysis},#{level},#{section})")
    int add(JudgeQuestion judgeQuestion);

    @Select("select questionId from judge_question  where subject=#{subject}  order by rand() desc limit #{pageNo}")
    List<Integer> findBySubject(String subject,Integer pageNo);
}

写好mapper底层查询后,需要创建service及其实现类来调用mapper底层。例如:


public interface JudgeQuestionService {

    List<JudgeQuestion> findByIdAndType(Integer paperId);

    IPage<JudgeQuestion> findAll(Page<JudgeQuestion> page);

    JudgeQuestion findOnlyQuestionId();

    int add(JudgeQuestion judgeQuestion);

    List<Integer> findBySubject(String subject,Integer pageNo);
}

@Service
public class JudgeQuestionServiceImpl implements JudgeQuestionService {


    @Autowired
    private JudgeQuestionMapper judgeQuestionMapper;

    @Override
    public List<JudgeQuestion> findByIdAndType(Integer paperId) {
        return judgeQuestionMapper.findByIdAndType(paperId);
    }

    @Override
    public IPage<JudgeQuestion> findAll(Page<JudgeQuestion> page) {
        return judgeQuestionMapper.findAll(page);
    }

    @Override
    public JudgeQuestion findOnlyQuestionId() {
        return judgeQuestionMapper.findOnlyQuestionId();
    }

    @Override
    public int add(JudgeQuestion judgeQuestion) {
        return judgeQuestionMapper.add(judgeQuestion);
    }

    @Override
    public List<Integer> findBySubject(String subject, Integer pageNo) {
        return judgeQuestionMapper.findBySubject(subject,pageNo);
    }
}

最后将输出文件方法写在controller层:


@RequestMapping("/exam/exportWord")
    public void exportWord(int examCode, HttpServletResponse response) throws FileNotFoundException{
    //由于题目应于考试信息对应 所以需要先查出考试信息后根据pageId来查找对应的组卷信息
        ExamManage res = examManageService.findById(examCode);
        int paperId = res.getPaperId();
        List<MultiQuestion> multiQuestionRes = multiQuestionService.findByIdAndType(paperId);   //选择题题库 1
        List<FillQuestion> fillQuestionsRes = fillQuestionService.findByIdAndType(paperId);     //填空题题库 2
        List<JudgeQuestion> judgeQuestionRes = judgeQuestionService.findByIdAndType(paperId);
        //响应到客户端
        XWPFDocument document= new XWPFDocument();
        //分页
        XWPFParagraph firstParagraph = document.createParagraph();
        //格式化段落
        firstParagraph.getStyleID();
        XWPFRun run = firstParagraph.createRun();
        int i = 1;
        run.setText("一、选择题" + "\r\n"); //换行
        for (MultiQuestion multiQuestion : multiQuestionRes) {
            String str = multiQuestion.getQuestion();
            String str1 = multiQuestion.getAnswerA();
            String str2 = multiQuestion.getAnswerB();
            String str3 = multiQuestion.getAnswerC();
            String str4 = multiQuestion.getAnswerD();
            run.setText(i + ". " + str + "\r\n");
            run.setText("A. " + str1 + "\r\n");
            run.setText("B. " + str2 + "\r\n");
            run.setText("C. " + str3 + "\r\n");
            run.setText("D. " + str4 + "\r\n");
            i++;
        }
        run.setText("二、填空题" + "\r\n");
        for (FillQuestion fillQuestion : fillQuestionsRes) {
            String str = fillQuestion.getQuestion();
            run.setText(i + ". " + str + "\r\n");
            i++;
        }
        run.setText("三、判断题" + "\r\n");
        for (JudgeQuestion judgeQuestion : judgeQuestionRes) {
            String str = judgeQuestion.getQuestion();
            run.setText(i + ". " + str + "\r\n");
            i++;
        }
        document.createTOC();

        try {
            //设置相应头
            this.setResponseHeader(response, res.getSource() + "试卷.doc");
            //输出流
            OutputStream os = response.getOutputStream();
            document.write(os);
            os.flush();
            os.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    
    private void setResponseHeader(HttpServletResponse response, String fileName) {
        try {
            try {
                fileName = URLEncoder.encode(fileName, "UTF-8");
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
            response.setContentType("application/octet-stream;charset=UTF-8");
            response.setHeader("Content-Disposition", "attachment;filename="+ fileName);
            //遵守缓存规定
            response.addHeader("Pargam", "no-cache");
            response.addHeader("Cache-Control", "no-cache");
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

效果:

在这里插入图片描述

到此这篇关于spring boot实现自动输出word文档功能的文章就介绍到这了,更多相关spring boot自动输出word文档内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

spring boot实现自动输出word文档功能的实例代码

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

spring boot怎么实现自动输出word文档功能

这篇文章主要介绍了spring boot怎么实现自动输出word文档功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。springboot是什么springboot一种全新的
2023-06-14

Java实现导出Word文档的示例代码

poi-tl是一个基于ApachePOI的Word模板引擎,也是一个免费开源的Java类库,你可以非常方便的加入到你的项目中。本文就利用它实现导出Word文档功能,需要的可以参考一下
2023-02-09

Java实现合并word文档的示例代码

在做项目中,经常会遇到一种情况,需要将一个小word文档的内容插入到一个大word(主文档)中。本文就为大家准备了Java实现合并word文档的方法,需要的可以参考一下
2022-11-13

Java实现PDF转为Word文档的示例代码

众所周知,PDF文档除了具有较强稳定性和兼容性外, 还具有较强的安全性,在工作中可以有效避免别人无意中对文档内容进行修改。本文将分为以下两部分介绍如何在保持布局的情况下将PDF转为Word文档,希望对大家有所帮助
2023-01-28

spring boot 自动更新静态文件和后台代码的实例

在spring boot使用的过程中, 发现我修改了静态文件, 前台刷新后, 没有任何变化, 必须重新启动, 才能看到, 这简直不能让人接受.那有什么方法来解决这个问题呢?Baidu之后, 得到了想要的答案,在这里记录下来。1. pom.x
2023-05-30

Vue实现预览文件(Word/Excel/PDF)功能的示例代码

这篇文章主要为大家详细介绍了如何通过Vue实现预览文件(Word/Excel/PDF)的功能,文中的实现步骤讲解详细,需要的小伙伴可以参考一下
2023-03-20

Spring Boot项目集成Knife4j接口文档的实例代码怎么写

本篇文章给大家分享的是有关Spring Boot项目集成Knife4j接口文档的实例代码怎么写,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Knife4j就相当于是swagge
2023-06-22

Spring Boot实现登录验证码功能的案例详解

验证码的作用可以有效防止其他人对某一个特定的注册用户用特定的程序暴力破解方式进行不断的登录尝试,接下来通过本文给大家介绍Spring Boot实现登录验证码功能,需要的朋友可以参考下
2022-11-13

Spring AOP实现功能权限校验功能的示例代码

实现功能权限校验的功能有多种方法,其一使用拦截器拦截请求,其二是使用AOP抛异常。 首先用拦截器实现未登录时跳转到登录界面的功能。注意这里没有使用AOP切入,而是用拦截器拦截,因为AOP一般切入的是service层方法,而拦截器是拦截控制器
2023-05-30

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录