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