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

时间: 2024-11-02 00:50:25

poi生成excel和itext、jasperResport生成pdf的相关文章

C#生成excel到其他电脑生成报表时报错

错误:在本机编译过程中没有出现错误,程序能够执行.Copy出编译程序以及所需要的一些Dll文件,放在另一台机子上出现以下错误System.InvalidCastException: Unable to cast COM object of type 'Microsoft.Office.Interop.Excel.ApplicationClass' to interface type 'Microsoft.Office.Interop.Excel._Application'. This opera

java生成excel表格和pdf并实现下载弹出框

今天在pdf和excel中都实现了在浏览器弹出下载框 将之前在网上查找的生成excel表格代码稍微修改下: public class CreateSimpleExcelToDisk { /** * @功能:手工构建一个简单格式的Excel */ private static List<News> getNews() throws Exception { List<News> data = new ArrayList<News>(); NewsDao dao = new

java使用poi实现excel表格生成

通过使用poi技术生成Excel,使用反射技术实现自动映射列表的数据. ExportTableUtil.java public class ExportTableUtil { /** * * @Description: 获取csv格式的字符串 * @param @param 表格头 * @param @param fieldNameList 对应的属性名 按照先后与表头对应而且值与数据类型的属性名对应 * @param @param params 数据 * @param @return * @p

java 利用 poi 生成 Excel文件的例子

在用java 写数据库应用的时候, 通常会生成各种报表,而这些报表可能会被导出为各种格式的文件,比如Excel文档,pdf 文档等等. 今天先做了一个生成Excel 文档的例子,主要解决以下问题: 1. 生成 Excel 文档. 2. 保护生成Excel文档,设置密码访问. 3. 自动对生成的Excel 文档第一行标题栏设置成filter 过滤形式, 方便用户使用. 用 apache  POI 生成 Excel 文档公用类  程序代码 package com.yihaomen.poi.sampl

Java利用POI生成Excel强制换行

前一段时间在做一个学校排课系统时,有一个地方需要利用把课程表生成excel汇出给客户,由于之前用excel都只是简单的应用,在单元格里都是用自动换行,而这次可能需要用到手动强制换行. 于是我在网上找了一下,网上找到的文章都是说在excel里的文字里加上/n,/n/r,/r/n之类,反正各种各样的都有,更奇怪的是还有人说在单元格里加上<br> 后来我试过用/r后的效里是生成的文件里,你用打开时,并不会换行,如果你用鼠标在单元格里点一下之后就会自动换行. 后来我琢磨了一下,可以通过如下方式进行, 

JAVA POI 应用系列(1)--生成Excel

POI简介(官网:http://poi.apache.org/)     Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能.自2009-09-28后,推出了3.5版本,提供了对Office2007的支持: 关于Apache POI一些重要的地方: 1)Apache POI 包含适合Excel97-2007(.xls文件)的HSSF实现.2)Apache POI XSSF实现用来处理Excel2007

POI生成EXCEL,公式不自动执行的有关问题

POI生成EXCEL,公式不自动执行的问题 场景:POI读取Excel模板. 当使用POI操作Excel时,发现由POI生成的公式能够在打开Excel是被执行, 而事先手工写入Excel模板文件的公式则不自动被调用,必须手动双击该Cell才能生效. 采取的办法: 1.使用cell.setCellFormula方法重新在制定Cell里写入公式. 2.使用sheet.setForceFormulaRecalculation(true);方法强制让改Sheet执行公式. 当然,在方法2能够生效的情况下

使用Apache POI写的一个生成Excel的工具类

话不多说,直接上代码,就一个类,注释也写得比较清楚了. /** * */ package com.common.office; import java.io.FileOutputStream; import java.lang.reflect.Field; import java.util.Calendar; import java.util.List; import org.apache.commons.collections.CollectionUtils; import org.apach

java使用poi生成Excel文件

1. maven导入poi包: <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.17</version> </dependency> pom.xml 2. 新建测试数据实体类: package com.clz.testexportexcel; public class Exc