note

AbstractPdfView 클래스를 이용한 PDF 다운로드 구현(PDF 만들기) 본문

JSP/Spring

AbstractPdfView 클래스를 이용한 PDF 다운로드 구현(PDF 만들기)

투한 2012. 3. 7. 11:15



















dispatcherNonHtml-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans   
       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

	<!-- 파일 다운로드 -->
	<bean id="viewResolver" class="org.springframework.web.servlet.view.BeanNameViewResolver" />
	<bean id="downloadController" class="madvirus.spring.chap07.controller.DownloadController" />
	<bean id="download" class="madvirus.spring.chap07.view.DownloadView" />

	
	<!-- PDF 다운로드 -->
	<bean id="pageReportController" class="madvirus.spring.chap07.controller.PageReportController" />
	<bean id="pageReport" class="madvirus.spring.chap07.view.PageReportView" />
	
</beans>






PageReportController
package madvirus.spring.chap07.controller;

import java.util.ArrayList;
import java.util.List;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class PageReportController {

	@RequestMapping("/pageReport")
	public ModelAndView pdfReport(){
		List<PageRank> pageRanks = new ArrayList<PageRank>();
		
		pageRanks.add(new PageRank(1,"/bbs/mir2/list"));
		pageRanks.add(new PageRank(2,"/bbs/mir3/list"));
		pageRanks.add(new PageRank(3,"/bbs/changchun2/list"));
		
		return new ModelAndView("pageReport","pageRanks",pageRanks);
	}
}


pageReport가 JSP를 사용하겠지만

xml 파일 다운로드에 보면

BeanNameViewResolver 가 데이터를 받아 들여

pageReport -> PageReportView가 실행된다

 







PageRank
package madvirus.spring.chap07.controller;

public class PageRank {

	private int rank;
	private String page;
	
	public PageRank() {
	}
	
	public PageRank(int rank, String page) {
		this.rank = rank;
		this.page = page;
	}
	
	public int getRank() {
		return rank;
	}
	public String getPage() {
		return page;
	}
	
}











PageReportView
package madvirus.spring.chap07.view;

import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import madvirus.spring.chap07.controller.PageRank;

import org.springframework.web.servlet.view.document.AbstractPdfView;

import com.lowagie.text.Cell;
import com.lowagie.text.Document;
import com.lowagie.text.Font;
import com.lowagie.text.Paragraph;
import com.lowagie.text.Table;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.PdfWriter;

public class PageReportView extends AbstractPdfView {

	@SuppressWarnings("unchecked")
	@Override
	protected void buildPdfDocument(Map<String, Object> model,
			Document document, PdfWriter writer, HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		List<PageRank> pageRanks = (List<PageRank>) model.get("pageRanks");
		Table table = new Table(2, pageRanks.size() + 1);
		table.setPadding(5);

		BaseFont bfKorean = BaseFont.createFont(
				"c:\\windows\\fonts\\batang.ttc,0", BaseFont.IDENTITY_H,
				BaseFont.EMBEDDED);

		Font font = new Font(bfKorean);
		Cell cell = new Cell(new Paragraph("순위", font));
		cell.setHeader(true);
		table.addCell(cell);
		cell = new Cell(new Paragraph("페이지", font));
		table.addCell(cell);
		table.endHeaders();

		for (PageRank rank : pageRanks) {
			table.addCell(Integer.toString(rank.getRank()));
			table.addCell(rank.getPage());
		}
		document.add(table);
	}

}


Map형식으로 key 와 value로 빼낸다

테이블을 형성 하고 padding도 주는 옵션도 있다 

폰트를 불러와  폰트 처리를 한다

테이블에 내용추가를 for문으로 한다