상단

오픈 소스로 다양한 컨텐츠를 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 param = new HashMap();
        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);
 %>
 
 
 
     
     다우기술 PMS
 
 
 
 JasperReport
[rtStr %>](<%=)
<%= filename %>

관리자 가이드


한글 설정

  • PDF에서 한글을 출력하기 위해서 jrxml 파일에서 다음과 같이 설정 한다.

 
 
     
 
 

참고 문헌


 
 

분류: 오픈소스 
BI

최종 수정일: 2024-09-30 12:26:18

이전글 :
다음글 :