1. 程式人生 > >poi生成excel和itext、jasperResport生成pdf

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