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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM