poi生成excel和itext、jasperResport生成pdf

1.Poi生成excel
    1)创建HSSFWorkbook对象
        HSSFWorkbook hssfWorkbook = new HSSFWorkbook();
        HSSFSheet sheet = hssfWorkbook.createSheet("运单数据");
    2)设置表头:
        HSSFRow headRow = sheet.createRow(0);
        headRow.createCell(0).setCellValue("运单号");
        headRow.createCell(1).setCellValue("寄件人");
        headRow.createCell(2).setCellValue("寄件人电话");
        headRow.createCell(3).setCellValue("寄件人地址");
        headRow.createCell(4).setCellValue("收件人");
        headRow.createCell(5).setCellValue("收件人电话");
        headRow.createCell(6).setCellValue("收件人地址");
    3)添加表头数据
        // 表格数据
        for (WayBill wayBill : wayBills) {
            HSSFRow dataRow = sheet.createRow(sheet.getLastRowNum() + 1);        //创建一个新的列对象
            dataRow.createCell(0).setCellValue(wayBill.getWayBillNum());        //创建单元格对象并设置值,wayBill为从数据库中查询到的运单对象
            dataRow.createCell(1).setCellValue(wayBill.getSendName());
            dataRow.createCell(2).setCellValue(wayBill.getSendMobile());
            dataRow.createCell(3).setCellValue(wayBill.getSendAddress());
            dataRow.createCell(4).setCellValue(wayBill.getRecName());
            dataRow.createCell(5).setCellValue(wayBill.getRecMobile());
            dataRow.createCell(6).setCellValue(wayBill.getRecAddress());
        }

    4)设置浏览器头信息
        1)设置向浏览器响应的数据类型:
            ServletActionContext.getResponse().setContentType("application/vnd.ms-excel");
                    
        2)设置文件名
            String filename = "运单数据.xls";
            String agent = ServletActionContext.getRequest().getHeader("user-agent");    //获取浏览器的类型
            filename = FileUtils.encodeDownloadFilename(filename, agent);    //采用FileUtils对文件名进行编码    //在资料中获取工具类
            ServletActionContext.getResponse().setHeader("Content-Disposition",    "attachment;filename=" + filename);    //设置文件名

        3)获取输出响应流并向浏览器写数据
            ServletOutputStream outputStream = ServletActionContext.getResponse()
                    .getOutputStream();
            hssfWorkbook.write(outputStream);
            
        4)关闭hssfWorkbook
            hssfWorkbook.close();
                
2.IText生成PDF
    1)导入坐标:
        itext ; itext-asian            //itext-asian提供对中文的支持
        
    2)设置头信息    //一样包括向浏览器响应的内容,文件名;操作同Poi生成excel
        ServletActionContext.getResponse().setContentType("application/pdf");
        String filename = "运单数据.pdf";
        String agent = ServletActionContext.getRequest().getHeader("user-agent");
        filename = FileUtils.encodeDownloadFilename(filename, agent);    
        ServletActionContext.getResponse().setHeader("Content-Disposition","attachment;filename=" + filename);

    3)创建文件对象
        Document document = new Document();
        PdfWriter.getInstance(document, ServletActionContext.getResponse().getOutputStream());
        document.open();
        
    4)创建表格,设置表格样式
        Table table = new Table(7);
        table.setWidth(80); // 宽度
        table.setBorder(1); // 边框
        table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER); // 水平对齐方式
        table.getDefaultCell().setVerticalAlignment(Element.ALIGN_TOP); // 垂直对齐方式

    5)设置字体
        BaseFont cn = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H",false);    
        Font font = new Font(cn, 10, Font.NORMAL, Color.BLUE);    // 设置表格字体

    6)设置表头
        table.addCell(buildCell("运单号", font));
        table.addCell(buildCell("寄件人", font));
        table.addCell(buildCell("寄件人电话", font));
        table.addCell(buildCell("寄件人地址", font));
        table.addCell(buildCell("收件人", font));
        table.addCell(buildCell("收件人电话", font));
        table.addCell(buildCell("收件人地址", font));
        
    7)设置表格数据
        for (WayBill wayBill : wayBills) {
            table.addCell(buildCell(wayBill.getWayBillNum(), font));
            table.addCell(buildCell(wayBill.getSendName(), font));
            table.addCell(buildCell(wayBill.getSendMobile(), font));
            table.addCell(buildCell(wayBill.getSendAddress(), font));
            table.addCell(buildCell(wayBill.getRecName(), font));
            table.addCell(buildCell(wayBill.getRecMobile(), font));
            table.addCell(buildCell(wayBill.getRecAddress(), font));
        }
        
    8)将表格加入文档
        document.add(table);
        
    9)关闭文件对象
        document.close();    //文件对象关闭时会自动向浏览器响应数据
    
3.jasperResport生成PDF报表
    1)IReport图形化报表开发工具的下载安装
    2)新建 JasperReport 模板文件 .jrxml
            文件--new-blankA4--Open this Template--设置文件存储路径--下一步-完成
    
    3)配置数据库连接    //可以通过此配置让ireport连接数据库获取数据
        导入jar包:工具--选项--add jar --ojdbc.jar
        report datasources 按钮--new--database JDBC connection--next--设置数据库类型,实例(orcale),用户名密码    
    
    4)点击工具栏中的report query打开窗口,可输入sql语句,直接查询到数据库数据
            此时根据查询出来的数据会在fields中显示字段,可将字段直接拖到要显示的位置    
                    
    5)常用报表组件:
        static text    :静态文本
        text field    :动态文本    //是一个字段的引用    
            
    6)对中文内容进行设置:    //默认情况下不支持中文
        工具--选项--add jar --导入jar:iTextAsian.jar
        要想正确显示中文,需要设置三个地方:
            选中要设置的文本框--在右侧属性中设置:
            font name 为 新宋体        //设置显示字体
            pdf font name is...  为 STSong-light    //设置支持中文
            pdf encoding 为 UniGB-UCS2-H (Chinese Simplified)    //设置pdf编码
        
        设置自动换行:点击要设置的文本--在右侧属性中设置:    stretch type 为 relative to tallest object

4.在项目中根据模板生成pdf报表:
    1)将waybill.jrxml复制到项目中
    2)编写代码实现pdf报表的生成
        // 从数据库中查询出要生成报表的数据
        List<WayBill> wayBills = wayBillService.findWayBills(model);

        // 下载导出
        // 设置头信息
        ServletActionContext.getResponse().setContentType("application/pdf");
        String filename = "运单数据.pdf";
        String agent = ServletActionContext.getRequest()
                .getHeader("user-agent");
        filename = FileUtils.encodeDownloadFilename(filename, agent);
        ServletActionContext.getResponse().setHeader("Content-Disposition",
                "attachment;filename=" + filename);

        // 根据 jasperReport模板 生成pdf
        // 读取模板文件
        String jrxml = ServletActionContext.getServletContext().getRealPath("/WEB-INF/jasper/waybill.jrxml");    //这里的路径为模板文件所在的路径
        JasperReport report = JasperCompileManager.compileReport(jrxml);

        // 设置模板数据
        // Parameter变量
        Map<String, Object> parameters = new HashMap<String, Object>();
        parameters.put("company", "传智播客");
        // Field变量
        JasperPrint jasperPrint = JasperFillManager.fillReport(report,
            parameters, new JRBeanCollectionDataSource(wayBills));        //这里第三个参数表示根据wayBills集合中的对象生成报表
        // 生成PDF客户端
        JRPdfExporter exporter = new JRPdfExporter();
        exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
        exporter.setParameter(JRExporterParameter.OUTPUT_STREAM,
                ServletActionContext.getResponse().getOutputStream());    //设置响应流
        exporter.exportReport();// 导出
        ServletActionContext.getResponse().getOutputStream().close();        
    

 

转载于:https://www.cnblogs.com/liuxuelin/p/10086546.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值