JasperReports

오픈소스 비즈니스 컨설팅
Pnuskgh (토론 | 기여)님의 2013년 5월 13일 (월) 11:31 판 (→‎참고 문헌)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)
둘러보기로 가기 검색하러 가기

오픈 소스로 다양한 컨텐츠를 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>

참고 문헌