java Aspose.Words实现Word生成表格并下载至本地

一、Maven加入Aspose.Words依赖

<dependency>
    <groupId>com.aspose</groupId>
    <artifactId>aspose-words</artifactId>
    <version>20.2</version>
</dependency>

二、后台生成表格并传输到本地

1、前台编写js,使其可以跳转至Controller

location.href="/wordExport/exportScoreList?username=sa&readFlag=1"

2、创建Controller类和处理方法

@RequestMapping("/wordExport")
@RestController
public class WordExportController{
    @Autowired
    private TestRecordService testRecordService;
    
    @GetMapping("/exportScoreList")
    public void exportScoreList(HttpServletResponse response,String username,
                                String testType,String testName,String readFlag){
        username=username==null?"":username;
        testType=testType==null?"":testType;
        testName=testName==null?"":testName;
        readFlag=readFlag==null?"":readFlag;

        List<TestRecordExt> testRecordExtList=testRecordService.getTestRecordExtList("",username,readFlag,testName,testType);
        try {
            String fileName="考试成绩单"+ DateUtil.getCurrentTimeByDay()+".doc";
            response.setHeader("content-type", "application/octet-stream");
            response.setContentType("application/octet-stream;charset=UTF-8");
            response.setHeader("Content-Disposition", "attachment; filename=" + new String(fileName.getBytes("utf-8"),"ISO-8859-1"));
            OutputStream outputStream=response.getOutputStream();
            Document document=new Document();
            DocumentBuilder builder = new DocumentBuilder(document);
            //单元格水平居中对齐
            builder.getCellFormat().setVerticalAlignment(CellVerticalAlignment.CENTER);
            //段落居中对齐
            builder.getParagraphFormat().setAlignment(ParagraphAlignment.CENTER);
            builder.writeln("考试成绩单");
            //段落左对齐
            builder.getParagraphFormat().setAlignment(ParagraphAlignment.LEFT);
            String pickname="";
            if(testRecordExtList!=null&&testRecordExtList.size()>0){
                pickname=testRecordExtList.get(0).getPickname();
            }
            builder.writeln("姓名:"+pickname);
            builder.startTable();
            //表头
            builder.insertCell();
            builder.write("序号");
            builder.insertCell();
            builder.write("考试");
            builder.insertCell();
            builder.write("考试时长");
            builder.insertCell();
            builder.write("成绩");
            builder.insertCell();
            builder.write("排名");
            builder.insertCell();
            builder.write("考试类型");
            builder.endRow();
            //表格内容
            for(int i=0;i<testRecordExtList.size();i++){
                TestRecordExt testRecordExt=testRecordExtList.get(i);
                builder.insertCell();
                builder.write((i+1)+"");
                builder.insertCell();
                builder.write(testRecordExt.getTestName());
                builder.insertCell();
                int testRecordLength=testRecordExt.getTestRecordLength();
                String testLengthStr="";
                int testHour=testRecordLength/3600;
                if(testHour>0){
                    testLengthStr+=testHour+" 小时";
                }
                int testMinutes=testRecordLength%3600/60;
                if(testMinutes>0){
                    testLengthStr+=testMinutes+" 分钟";
                }
                int testSecond=testRecordLength%60;
                if(testSecond>0){
                    testLengthStr+=testSecond+" 秒";
                }
                builder.write(testLengthStr);
                builder.insertCell();
                builder.write(testRecordExt.getTestScore()+"分");
                builder.insertCell();
                builder.write(testRecordExt.getRankNo()+"");
                builder.insertCell();
                builder.write(testRecordExt.getTestTypeName());
                builder.endRow();
            }
            builder.endTable();
            document.save(outputStream, SaveFormat.DOC);
            outputStream.flush();
            outputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }catch (Exception e) {
            e.printStackTrace();
        }
}

最终效果图

三、遇到的问题

1、Maven加入aspose.words依赖出现下载不了jar包的情况

解决请参考下面这条博客

maven不能下载aspose解决方案

2、将文件下载到本地时,出现文件名中的中文无法显示

Java 下载文件,文件名无法显示中文问题解决

3、Word文档中有水印,而且有三个水印

4、Maven加上 aspose.words依赖之后,Spring Boot启动需要10分钟。

有哪位仁兄解决了上面这两个问题请务必告诉我

如果大家对使用poi组件实现Word生成表格并下载至本地感兴趣的话,可以去看我的另一篇博客

java poi实现Word生成表格并下载至本地

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值