2007년 11월 6일 화요일

Spring 과 iText를 연동하여 PDF 생성하기

Spring MVC와 iText 를 이용하여 PDF 문서를 생성해보도록 하겠습니다.


실제 Spring MVC를 이용하지 않고 iText만 이용하여 고품질의 PDF문서를 생성할 수 있다.
하지만 이미 프로젝트내에 Spring MVC를 도입하여 사용을 하고 있는 상황이라면 별도로 MVC를 구성하는것 보다는 아예 Spring MVC를 이용하는것이 편하다.

Spring MVC와 iText를 연동하는데 아래와 같이 4가지 단계가 필요하다.

  1. web.xml에서 서블릿 선언 및 서블릿 맷핑을 한다.
  2. pdf-servlet.xml 에서 viewController와 실제 PDF 를 엑세스할 URL을 매퍼를 선언한다.
  3. viewController 클래스를 만든다.
  4. pdfView 클래스를 만든다.

web.xml에서 아래와 같이 pdf용 서블릿을 선언하고 서블릿 맵핑을 한다.

[code xml] <!-- PDF Servlet Definition --> <servlet> <servlet-name>config/pdf</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <load-on-startup>2</load-on-startup> </servlet> <!-- Servlet Mapping For PDF DispatcherServlet --> <servlet-mapping> <servlet-name>config/pdf</servlet-name> <url-pattern>*.pdf</url-pattern> </servlet-mapping>[/code] 서블릿 명을 config/pdf로 설정하였으므로 우리가 만들어야 할 pdf 서블릿 설정 파일명은 pdf-servlet.xml이 되겠다.


pdf-servlet.xml에서는 실제 pdf 페이지를 요청하였을때 호출할 컨트롤러를 매핑해주는 urlMapping 빈 및 호출될 컨트롤러를 선언해준다. [code xml] <beans> <bean id="beanNameViewResolver" class="org.springframework.web.servlet.view.BeanNameViewResolver" /> <bean id="viewController" class="org.prototype.common.controller.MultiDocumentController" /> <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="/viewPDF.pdf">viewController</prop> </props> </property> </bean> </beans> [/code] viewController 클래스는 실제 MultiActionController를 상속 받고 있는데 이렇게 함으로써 하나의 Controller로써 다양한 문서의 출력이 가능하다.
[code java] public class MultiDocumentController extends MultiActionController { public ModelAndView viewPDF( HttpServletRequest request, HttpServletResponse response ) throws Exception { List<String> list = new ArrayList<String>(); Map<String, List<String>> model = new HashMap<String, List<String>>(); model.put( "list",list ); BasePdfView pdfView = new BasePdfView(); return new ModelAndView( pdfView, model ); } }[/code] 마지막으로 BasePdfView 클래스에서 실제 출력할 PDF 에 대한 코딩을 해주고 있음을 알수 있다.
[code java] public class BasePdfView extends AbstractPdfView { @SuppressWarnings("unchecked") protected void buildPdfDocument(Map model, Document document, PdfWriter writer, HttpServletRequest request, HttpServletResponse response) throws Exception {} }[/code]

댓글 없음:

댓글 쓰기