码迷,mamicode.com
首页 > Web开发 > 详细

poi生成excel和itext、jasperResport生成pdf

时间:2018-12-08 11:16:33      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:param   数据类型   参数   content   enter   ext   模板   一个   setborder   

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();        
    

 

poi生成excel和itext、jasperResport生成pdf

标签:param   数据类型   参数   content   enter   ext   模板   一个   setborder   

原文地址:https://www.cnblogs.com/liuxuelin/p/10086546.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!