本文主要介紹iReport軟體生成報表模板使用Jasper進行數據填充並生成pdf文檔的實現過程。 ...
報表模板生成軟體:iReport 、 潤乾、水晶。
一、Jaspersoft iReport Desiginer 5.60 的使用
1、軟體jar包的下載地址與配置
百度雲盤下載鏈接: https://pan.baidu.com/s/1Ln9ewKMhYuau1bG9EgdUNQ 密碼:cspl
此軟體最高僅支持1.7版本的JDK,如果是1.8版本的JDK,需要安裝1.7以下的JDK,然後修改配置文件
配置文件位置 : 安裝目錄\iReport-5.6.0\etc\ireport.conf,增加以下配置
jdkhome="C:\Program Files\Java\jdk1.7.0_80"
2、創建模版
如果需要刪除不需要的區域,右鍵選中該區域,然後選擇Delete Band
以下三個區域為必須
如需添加文本控制項,選擇下圖中的Static Text
如果控制項中有中文,需要添加支持中文的iTextAsain的JAR包,按照下圖所示進行配置
指定字體和屬性設置,所有使用中文的控制項,都必須按照下圖所示進行配置.
創建數據源,如果連接Oracle資料庫,需要手動指定資料庫驅動,配置方式請參考上面配置iTextAsain的JAR包的步驟.
指定SQL語句
從Fields中拖拽需要的數據到模版中的Detail區域
此時可以用滑鼠拖動控制項到合適的區域,如果需要修改對應的表頭,可以直接在Page Header區域進行修改,如下圖所示
如果需要添加動態參數,右鍵單擊 Parameter進行添加
修改Parameter的key
修改之後,拖動到合適的區域
至此,模版創建成功
如需預覽,點擊預覽按鈕即可
二、 使用Jasper生成PDF
1、導入依賴
1 <!-- itext --> 2 <dependency> 3 <groupId>com.lowagie</groupId> 4 <artifactId>itext</artifactId> 5 <version>2.1.7</version> 6 </dependency> 7 <dependency> 8 <groupId>com.itextpdf</groupId> 9 <artifactId>itext-asian</artifactId> 10 <version>5.2.0</version> 11 </dependency> 12 13 <!-- groovy --> 14 <dependency> 15 <groupId>org.codehaus.groovy</groupId> 16 <artifactId>groovy-all</artifactId> 17 <version>2.2.0</version> 18 </dependency> 19 20 <!-- jasperreport --> 21 <dependency> 22 <groupId>net.sf.jasperreports</groupId> 23 <artifactId>jasperreports</artifactId> 24 <version>5.2.0</version> 25 <exclusions> 26 <exclusion> 27 <groupId>com.lowagie</groupId> 28 <artifactId>itext</artifactId> 29 </exclusion> 30 </exclusions> 31 </dependency>
拷貝iReport設計好的模版到工程中
2、前臺代碼
增加按鈕
{
id : 'button-export',
text : '導出PDF',
iconCls : 'icon-undo',
handler : doExportPDF
}
綁定按鈕點擊事件
function doExportPDF() {
window.location.href = "../../areaAction_exportPDF.action"
}
3、java代碼
實現Action
1 @Autowired 2 private DataSource dataSource; 3 4 @Action("areaAction_exportPDF") 5 public String exportPDF() throws Exception { 6 7 // 讀取 jrxml 文件 8 String jrxml = ServletActionContext.getServletContext() 9 .getRealPath("/jasper/area.jrxml"); 10 // 準備需要數據 11 Map<String, Object> parameters = new HashMap<String, Object>(); 12 parameters.put("company", "黑馬程式員"); 13 // 準備需要數據 14 JasperReport report = JasperCompileManager.compileReport(jrxml); 15 JasperPrint jasperPrint = JasperFillManager.fillReport(report, 16 parameters, dataSource.getConnection()); 17 18 HttpServletResponse response = ServletActionContext.getResponse(); 19 OutputStream ouputStream = response.getOutputStream(); 20 // 設置相應參數,以附件形式保存PDF 21 response.setContentType("application/pdf"); 22 response.setCharacterEncoding("UTF-8"); 23 response.setHeader("Content-Disposition", 24 "attachment; filename=" + FileDownloadUtils 25 .encodeDownloadFilename("工作單.pdf", ServletActionContext 26 .getRequest().getHeader("user-agent"))); 27 // 使用JRPdfExproter導出器導出pdf 28 JRPdfExporter exporter = new JRPdfExporter(); 29 exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); 30 exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, ouputStream); 31 exporter.exportReport();// 導出 32 ouputStream.close();// 關閉流 33 34 return NONE; 35 }
4、解決字體無法載入的異常
將下載地址中的iTextAsian.jar部署到Maven本地倉庫,命令 :
mvn install:install-file -DgroupId=com.xxxxx -DartifactId=iTextAsain -Dversion=10.2.0.2.0 -Dpackaging=jar -Dfile=路徑
將pom文件中的坐標替換
原坐標 <dependency> <groupId>com.itextpdf</groupId> <artifactId>itext-asian</artifactId> <version>5.2.0</version> </dependency>
新坐標,該坐標請根據自己本地倉庫的實際情況進行修改 <dependency> <groupId>com.alpha</groupId> <artifactId>itextasain</artifactId> <version>10.2.0.2.0</version> </dependency>
三、效果
1、網頁端
2、生成的pdf文件: