JasperReports

오픈소스 비즈니스 컨설팅
둘러보기로 가기 검색하러 가기

오픈 소스로 다양한 컨텐츠를 PDF, HTML, XLS, CSV 파일 등으로 출력하는 리포팅 툴인 JasperReports를 정리한다. Java Class 파일로 제공되므로 환경 설정을 하여 사용 한다.


설치 가이드

  • 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>

참고 문헌