JasperReports
둘러보기로 가기
검색하러 가기
오픈 소스로 다양한 컨텐츠를 PDF, HTML, XLS, CSV 파일 등으로 출력하는 리포팅 툴인 JasperReports를 정리한다. Java Class 파일로 제공되므로 환경 설정을 하여 사용 한다.
- 홈페이지 : http://www.jaspersoft.com/, http://sourceforge.net/projects/jasperreports/, http://sourceforge.net/projects/jaspersoft/
- 다운로드 : http://sourceforge.net/project/showfiles.php?group_id=36382
- 라이센스 : GNU LGPL 3.0
- 플랫폼 : Java
설치 가이드
- Web Application에 환경 설정
- 다운로드 사이트에서 "jasperreports-3.1.4-project.zip"을 다운로드 한다.
- 압축을 풀어 lib/* 과 dist/*.jar 파일을 /WEB-INF/lib 폴더에 복사 한다.
- 필요한 JDBC Driver를 /WEB-INF/lib 폴더에 복사하고 Apache Tomcat을 재기동 한다.
사용자 가이드
- iReport에서 작성한 jrxml 파일과 DB 접속 정보로 문서(html, xml, csv, pdf, rtf, xls) 문서를 생성하는 라이브러리 샘플 (pnus.jasperreports.jasperreports.java)
- $TOMCAT_HOME/webapps/jasperreports : JasperReports를 적용한 Web Application
- $TOMCAT_HOME/webapps/jasperreports/jrxml/ : jrxml 파일 저장 폴더
- $TOMCAT_HOME/webapps/jasperreports/files/[type]/ : 생성된 문서 저장 폴더, type별로 다른 폴더를 사용함
package pnus.jasperreports; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.HashMap; import java.util.Map; import net.sf.jasperreports.engine.JRAbstractExporter; import net.sf.jasperreports.engine.JRException; import net.sf.jasperreports.engine.JRExporterParameter; import net.sf.jasperreports.engine.JasperCompileManager; import net.sf.jasperreports.engine.JasperFillManager; import net.sf.jasperreports.engine.JasperPrint; import net.sf.jasperreports.engine.JasperReport; import net.sf.jasperreports.engine.export.JRCsvExporter; import net.sf.jasperreports.engine.export.JRGraphics2DExporter; import net.sf.jasperreports.engine.export.JRHtmlExporter; import net.sf.jasperreports.engine.export.JRPdfExporter; import net.sf.jasperreports.engine.export.JRPrintServiceExporter; import net.sf.jasperreports.engine.export.JRRtfExporter; import net.sf.jasperreports.engine.export.JRTextExporter; import net.sf.jasperreports.engine.export.JRXlsExporter; import net.sf.jasperreports.engine.export.JRXlsExporterParameter; import net.sf.jasperreports.engine.export.JRXmlExporter; public class jasperreports { public static String jdbcDriverMySQL = "com.mysql.jdbc.Driver"; public static String jdbcUrlMySQL = "jdbc:mysql://localhost/dotprojectdb"; private static String username = "DB 사용자 아이디"; private static String password = "DB 사용자 암호"; private static Connection conn = null; private String rootJrxml = "$TOMCAT_HOME/webapps/jasperreports/jrxml/"; private String rootFile = "$TOMCAT_HOME/webapps/jasperreports/files/"; public String makeReport(String jrxml, String query, String type, String filename) { JasperReport report = null; JasperPrint print = null; JRAbstractExporter exporter = null; Map<String, String> param = new HashMap<String, String>(); String outFilename = null; openDatabase(); try { param.put("query", query); report = JasperCompileManager.compileReport(rootJrxml + jrxml); print = JasperFillManager.fillReport(report, param, conn); outFilename = rootFile + type + "/" + filename; if (type == "html") { exporter = new JRHtmlExporter(); } else if (type == "xml") { exporter = new JRXmlExporter(); } else if (type == "csv") { exporter = new JRCsvExporter(); } else if (type == "pdf") { exporter = new JRPdfExporter(); } else if (type == "rtf") { exporter = new JRRtfExporter(); } else if (type == "xls") { exporter = new JRXlsExporter(); exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.FALSE); } else { return null; } exporter.setParameter(JRExporterParameter.JASPER_PRINT, print); exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, outFilename); exporter.exportReport(); } catch (JRException jrException) { jrException.printStackTrace(); return null; } finally { closeDatabase(); } return outFilename; } private boolean openDatabase(String jdbcDrive, String jdbcUrl, String username, String password) { if (conn != null) { return true; } try { Class.forName(jdbcDrive).newInstance(); conn = DriverManager.getConnection(jdbcUrl, username, password); } catch (InstantiationException e) { e.printStackTrace(); return false; } catch (IllegalAccessException e) { e.printStackTrace(); return false; } catch (ClassNotFoundException e) { e.printStackTrace(); return false; } catch (SQLException e) { e.printStackTrace(); return false; } return true; } private boolean openDatabase(String username, String password) { return openDatabase(jdbcDriverMySQL, jdbcUrlMySQL, username, password); } private boolean openDatabase() { return openDatabase(username, password); } private void closeDatabase() { try { if ((conn != null) && (!conn.isClosed())) { conn.close(); } } catch (SQLException e) { } conn = null; } }
- 위 pnus.jasperreports.jasperreports.java를 사용하는 샘플 JSP 파일
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="pnus.jasperreports.jasperreports" %> <% jasperreports report = null; String type = null; String filename = null; String query = null; String rtStr = null; request.setCharacterEncoding("UTF-8"); type = "html"; filename = "test01.html"; report = new jasperreports(); query = "select project_name, project_start_date, project_end_date," + " project_owner, project_actual_end_date, project_percent_complete" + " from projects"; rtStr = report.makeReport("test01.jrxml", query, type, filename); %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">다우기술 PMS JasperReport
[<%= rtStr %>]
<%= filename %>
관리자 가이드
한글 설정
- PDF에서 한글을 출력하기 위해서 jrxml 파일에서 다음과 같이 설정 한다.
<textElement textAlignment="Center" verticalAlignment="Middle"> </textElement>
참고 문헌
- JasperReports 소개 : 삼성 Anyframe에서 외부 구성 요소로서 정리한 자료
- iText, a JAVA-PDF library