14.6. Document views (PDF)
이미 이전 글에서 XML 형식으로 모델 데이타를 보여주는 방법을 살펴 봤기 때문에 PDF와 Exel로 출력하는 방법도 비슷하게 배울 수 있을 것 같습니다.
문제는 view 클레스를 만드는 기술인데 XSLT 만드는 방법은 쉬웠는데 PDF와 Exel 만드는 코딩은 어떨지 해봐야겠네요. :)
1. 먼저 추가 적인 jar 파일들이 필요합니다.
Exel은 poi.jar PDF는 iText.jar가 필요합니다.
2. 이번에도 컨트롤러 만들고 등록 합니다.
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
List<MemberInfo> infos = ServiceManager.getMemberInfoService().getAll();
Map<String, Object> members = new HashMap<String, Object>();
members.put("members", infos);
return new ModelAndView("memberListPdf", members);
}
}
Xstl 예제랑 거의 같은데 view 이름만 다릅니다.
3. view 클레스들을 만듭니다.
@SuppressWarnings("unchecked")
@Override
protected void buildPdfDocument(Map model, Document document, PdfWriter writer, HttpServletRequest request,
HttpServletResponse response) throws Exception {
List<MemberInfo> memberInfos = (List<MemberInfo>) model.get("members");
for(MemberInfo memberInfo : memberInfos){
document.add(new Paragraph(
memberInfo.getName() + " " +
memberInfo.getEmail() + " " +
memberInfo.getHome()
));
}
}
}
몬지 모르겠지만 Paragraph 객체로 찍는 것 같군요.
4. view 프로퍼티에 등록합니다.
memberListXml.stylesheetLocation=/WEB-INF/xsl/memberList.xslt
memberListXml.root=memberInfos
memberListPdf.class=net.ailgejava.members.view.pdf.MemberListPdfView
이전 글에 등록했던 내용과 같이 있습니다.
5. 데모
이런.. 이름이 안 찍혔네요. 흠... 왜이럴까요; 이름은 한글이라 인코딩 문제가 있는 걸까요. 흠... confluence에서 PDF로 빼낼 때도 한글 문제가 있었는데 어떻게 해결했었는지 살펴봐야겠네요.