java SSM框架中使用aspose-words导出数据

来源:互联网 发布:论坛抢沙发软件 编辑:程序博客网 时间:2024/05/20 15:59

关于这次项目总结:客户要求做下载功能,就是将查询到的数据用固定的模板导出成word。

好在最终实现了功能,特此记录。

首先导入aspose-words 包

1.

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

2.引入license.xml文件

3.将前台查询要下载的参数传到控制层(可以将具体逻辑写到service层)

、,  @RequestMapping("doload")
      @ResponseBody
     public void doloadtwo(String id,HttpServletResponse response) throws IOException{
   Use use =useService.findObjectById(id);
    //第一步 license.xml 非正版会加水印
    License license = new License();
         try {
             license.setLicense(UseController.class.getClassLoader().getResourceAsStream( "\\license.xml"));
         } catch (Exception e) {
             System.out.println(e.getMessage());
         }
         
         String template = "D:\\demo.doc";    //可以是doc或docx
         String destdoc = "D:\\demo_new.doc"; //可以是doc或docx
         Document doc; 
         try{
             //第二步 读取word模板文件,可以是.doc或者.docx
             doc = new Document( template );
             
             //第三步 向模板中填充数据
             //主要调用aspose.words的邮件合并接口MailMerge
             //3.1 填充单个文本域
             String[] Flds = new String[]{
“aaa”,"bbb","ccc"}; //文本域
             String aaa=use.getaaa(); 
             String bbb= use.getbbb();
             String ccc= use.getccc();
           
             SimpleDateFormat sdf=
                 new SimpleDateFormat("yyyy-MM-dd");
           
             Object[] Vals = new Object[]{cydw,cdry,dwsx,cdyt,dh,cdnr,lyxg,cysj,jdr,pzr}; //值
             doc.getMailMerge().execute(Flds, Vals); //调用接口
              
             //3.2 填充单层循环的表格
             DataTable visitTb = new DataTable("table"); //和你要打印的字段对应
             visitTb.getColumns().add("a");
             visitTb.getColumns().add("b");   
             visitTb.getColumns().add("c");
             visitTb.getColumns().add("d"); 
             visitTb.getColumns().add("e"); 
           
             //向表格中填充数据
             List<Message>  list01= Service.findObjectById(id);
             for(Message mes:list01){
                 DataRow row = visitTb.newRow(); //新增一行 
                 row.set(0, mes.geta()); //根据列顺序填入数值
                 row.set(1, mes.getb());
                 row.set(2, mes.getc());
                 row.set(3, mes.getd());
                 row.set(4, mes.gete());
               
                 
                 visitTb.getRows().add( row );   //加入此行数据
             }
             //对于无数据的情况,增加一行空记录
             if( visitTb.getRows().getCount() == 0 ){ 
                 DataRow row = visitTb.newRow();
                 visitTb.getRows().add( row );
             }
             doc.getMailMerge().executeWithRegions( visitTb ); //调用接口
             
         
             //第四步 保存新word文档
             response.reset(); 
           response.setContentType("application/x-msdownload");
           response.setHeader("Content-Disposition", "attachment; filename="+URLEncoder.encode("a表.doc","UTF-8"));//设置编码格式
           OutputStream out = response.getOutputStream();
             doc.save(destdoc);
             doc.save(out, SaveOptions.createSaveOptions(SaveFormat.DOC));
             System.out.println("End...");
             out.close();
         }catch (Exception e) {
             System.out.println(e.getMessage());
         }
        
     }


原创粉丝点击