1번이 끝났으면 2번은 스프링에 적용하는 방법이다.
1번에서 만든 jrxml을 컴파일 하여 .jasper 파일을 만든다.
word.jrxml 이었으면 word.jasper 파일이 나올것이다.
1. .jasper파일을 WEB-INF/classes 폴더 또는 src/main/resources 폴더 안에 넣는다.
2. controller 작성
@RequestMapping(value = "/reports/download",method = RequestMethod.POST)
public ModelAndView download(HttpServletRequest request)
throws Exception {
ArrayList<ResumeVO> list = new ArrayList<ResumeVO>();
list = resumeDAOService.selectMemberInfo(memSeq);
//리스트에 쿼리를 돌려 각자 사용할 데이터를 담는다. list = 리포트 쿼리
ArrayList<ResumeVO> list2 = new ArrayList<ResumeVO>();
list2 = resumeDAOService.selectSkills(list.get(0).getResumeSeq());
// list2 = sub dataset 에서 설정한 쿼리.
//list에 담을때 주의할 점은 ireport에 설정한 필드명이과 쿼리의 컬럼이 일치해야됨
URL location = getClass().getResource("/words.jasper"); // .jasper 파일 경로 불러오기
String reportPath = location.getPath(); // .jasper 파일 경로 저장
JRBeanCollectionDataSource src = new JRBeanCollectionDataSource(list,false); // 리포트 메인 쿼리의 값을 담을 데이터 소스
JRBeanCollectionDataSource src2 = new JRBeanCollectionDataSource(list2,false); // sub dataset 쿼리 값을 담을 데이터 소스
Map<String,Object> parameters = new HashMap<String,Object>();
parameters.put("datasource", src);
parameters.put("subdata", src2); // 1장에서 설정한 dataset 이름과 같아야됨
JasperPrint jasperPrint = JasperFillManager.fillReport(reportPath, parameters,src);
HttpSession session = request.getSession();
String path = session.getServletContext().getRealPath("")+"/resources/download/resume/"; // 이력서의 저장 경로
JRDocxExporter exporter = new JRDocxExporter(); //워드로 저장하기 위해 JRDocxExporter 사용
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, "이력서.docx");
exporter.exportReport(); // 워드로 내보낸다
return DownloadController("이력서.docx"); // 저장 후 바로 다운로드를 위해서 downloadController로 넘김 이 컨트롤러는 예전에 한 정리에 있음
}
public ModelAndView DownloadController(String path) throws UnsupportedEncodingException {
}
Download 세팅은
http://trandent.com/board/iReport/detail/240
여기서 1,3번을 보면 됩니다.