: Jasper Report를 이용해서 "Hello World" 문자열을 출력하는 PDF 문서를 생성해 보았다.
Jasper Report가 문서를 출력하기 위한 작업 순서는 다음과 같다.
1. iReport 등의 리포트 템플릿 tool을 이용한 템플릿 생성.
2. 생성된 템플릿을 자바 소스에서 로딩
3. 템플릿을 컴파일
4. 컴파일된 템플릿에 데이터를 매핑.
5. 출력물 생성.
여기서는 iReport 5.5를 사용했고, iReport를 사용해서 템플릿을 생성하면 기본적으로 .jrxml 파일이 생성된다. .jrxml 파일만 자바 소스에서 로딩하게 되면, 소스상에서 .jrxml 파일을 컴파일 해주어야하지만 iReport에서 컴파일 버튼을 눌러 컴파일을 한 후, 컴파일된 파일인 .jasper 파일을 자바 소스 경로에 위치시키면 .jrxml 파일을 소스상에서 컴파일 할 필요가 없으며, .jasper 파일만 로딩해서 데이터를 매핑 시켜주면 된다.
Jasper Report에서는 데이터를 매핑시켜주는 작업을 템플릿에 데이터를 채운다는 의미로 fill이라는 용어를 사용한다.
iReport에서 템플릿을 생성한후, 컴파일을 하면 .jrxml 파일과 컴파일된 파일인 .jasper 파일이 생성된다.
--> 빨간색 박스 버튼을 누르면 템플릿이 컴파일되고, .jasper 파일이 생성된다.
생성된 파일을 원하는 경로에 위치시킨다. 여기서는 classpath:/rpt/resource 경로에 위치시켰다.
다음은 서버쪽에서 템플릿 파일을 로딩해서 PDF 문서를 생성한 후, 웹 브라우저에서 띄워주는 소스이다.
public class TestSimpleReportProcessor {
Log logger = LogFactory.getLog(TestSimpleReportProcessor.class);
/**
* 재물조사 연도 정보 조회.
*
* @param request
* @param response
* @param dataView
* @param sqlClientAssists
* @param globalSqlClientAssists
* @param reqData
* @return
* @throws Exception
*/
public DataView createSimpleReport(HttpServletRequest request, HttpServletResponse response,
DataView dataView, SqlClientAssists sqlClientAssists, GlobalSqlClientAssists globalSqlClientAssists,
RequestData reqData) throws Exception
{
logger.info("심플 리포트 생성1.");
String filePath = AppWorksResources.getString("server.classpath.dir");
try {
/**
* 템플릿 파일을 컴파일.
* 컴파일된 .jasper 파일이 존재한다면 생략할 수 있다.
*/
JasperCompileManager.compileReportToFile(filePath + "/rpt/resource/report1.jrxml");
String reportFileName = filePath + "/rpt/resource/report1.jasper";
File reportFile = new File(reportFileName);
if (!reportFile.exists())
{
throw new JRRuntimeException("File WebappReport.jasper not found. The report design must be compiled first.");
}
/**
* 템플릿파일로 넘겨주는 파라미터와 데이터를 매핑하는 부분.
* 여기서는 단순히 "Hello World라는 문자열만 출력해주므로 필요없음.
*/
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("ReportTitle", "심플 리포팅");
parameters.put("BaseDir", reportFile.getParentFile());
JasperPrint jasperPrint = JasperFillManager.fillReport(reportFileName, parameters, new WebappDataSource());
/**
* 데이터를 filling하는 과정을 거친 jasperPrint 객체를 세션에 저장.
*/
request.getSession().setAttribute(BaseHttpServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, jasperPrint);
/**
* web.xml 파일에 설정된 /servlet/pdf 서블릿으로 리다이렉트한다.
* <servlet>
* <servlet-name>PdfServlet</servlet-name>
* <servlet-class>net.sf.jasperreports.j2ee.servlets.PdfServlet</servlet-class>
* </servlet>
*
* <servlet-mapping>
<servlet-name>PdfServlet</servlet-name>
<url-pattern>/servlets/pdf</url-pattern>
</servlet-mapping>
*
*
*
*/
response.sendRedirect("servlets/pdf");
} catch (JRException e) {
logger.info("예외 메시지: " + e.getMessage());
e.printStackTrace();
}
return dataView;
}
}
--> 위의 과정을 거치면 다음과 같은 PDF 문서가 웹에서 출력된다.