[해야할 일]
(1)pom.xml에 필요한 라이브러리 추가.
(2)servlet-context.xml에 InternalResourceViewResolver와 ViewResolver 빈 등록하기
(3) Controller 생성 [PageRankXlsController.java]
(4) 커스텀 뷰 생성 [PageRanksPdfView.java]
(5) 커스텀 뷰 servlet-context.xml에 빈으로 등록
(1) pom.xml에 필요한 라이브러리 추가.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
<!-- PDF View 처리 -->
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<version>2.1.7</version>
<exclusions>
<exclusion>
<groupId>bouncycastle</groupId>
<artifactId>bcmail-jdk14</artifactId>
</exclusion>
<exclusion>
<groupId>bouncycastle</groupId>
<artifactId>bcprov-jdk14</artifactId>
</exclusion>
<exclusion>
<groupId>bouncycastle</groupId>
<artifactId>bctsp-jdk14</artifactId>
</exclusion>
</exclusions>
</dependency>
|
(2) servlet-context.xml에 InternalResourceViewResolver와 ViewResolver 빈 등록하기
1
2
3
4
5
6
7
8
|
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:order="2">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
<!-- CustomView: BeannameViewResolver는 파일을 등록해놓으면 id로 찾아간다는 것. -->
<beans:bean id="viewResolver" class="org.springframework.web.servlet.view.BeanNameViewResolver"
p:order="1" />
|
우선순위 충돌을 막기위해 Namespace에서 p를 설정하고 p:order 태그를 걸어줬다.
참고로 p:order의 값은 작으면 작을수록 우선순위가 높다.
(3) Controller 생성 [PageRankXlsController.java]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
package com.bitcampi.mvc0802;
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 PageRankXlsController {
@RequestMapping("/pageRanks/xls")
public ModelAndView getXlsPage() {
List<PageRank> pageRanks = new ArrayList<PageRank>();
// 데이터는 여기서 넣어서 전송함
pageRanks.add(new PageRank(1, "www.naver.com"));
pageRanks.add(new PageRank(2, "www.daum.com"));
pageRanks.add(new PageRank(3, "www.nate.com"));
return new ModelAndView("pageRanks", "pageRanks", pageRanks);
}
@RequestMapping("/pageRanks/pdf")
public ModelAndView getPdfPage() {
List<PageRank> pageRanks = new ArrayList<PageRank>();
// 데이터는 여기서 넣어서 전송함
pageRanks.add(new PageRank(1, "www.naver.com"));
pageRanks.add(new PageRank(2, "www.daum.com"));
pageRanks.add(new PageRank(3, "www.nate.com"));
return new ModelAndView("pageRanksPdf", "pageRanks", pageRanks);
}
}
|
getXlsPage()는 앞서 엑셀을 넣기 위해 사용했으므로 여기서는 생략한다.
참고로
return new ModelAndView("pageRanksPdf", "pageRanks", pageRanks);
참고로
return new ModelAndView("pageRanksPdf", "pageRanks", pageRanks);
이 문장의 뜻은 pageRanks 파일을 "pageRanks" 이름으로 pageRanksPdf 이름의 커스텀뷰
로 전송한다는 뜻이다.
그래서 나중에 커스텀 뷰 이름을 Bean으로 등록할 때, 맨 처음 변수와 ID를 똑같이
등록 해줘야 한다.
여튼 우리는 여기서 getPdfPage()만 사용한다.
(4) 커스텀 뷰 생성 [PageRanksPdfView.java]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
package com.bitcampi.mvc0802;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
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 PageRanksPdfView extends AbstractPdfView{
@Override
protected void buildPdfDocument(Map<String, Object> model, Document document, PdfWriter writer,
HttpServletRequest request, HttpServletResponse response) throws Exception {
//Controller에서 model 데이터 받기
List<PageRank> pageRanks = (List<PageRank>)model.get("pageRanks");
//테이블 생성(제목도 적어야 해서 +1)
Table table = new Table(2, pageRanks.size() + 1);
//테이블 padding값 주기
table.setPadding(5);
//Font 지정
BaseFont bf = BaseFont.createFont("c:\\windows\\fonts\\batang.ttc,0", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
Font font = new Font(bf);
//첫번째 Cell 생성 및 테이블에 추가 : 제목1
Cell cell = new Cell(new Paragraph("순위", font));
cell.setHeader(true); //Header처리를 하기위한 메서드
table.addCell(cell);
//두번째 Cell 생성 및 테이블에 추가 : 제목2
cell = new Cell(new Paragraph("페이지", font));
table.addCell(cell);
table.endHeaders(); //Header처리는 여기서 끝이다.
for(PageRank rank : pageRanks) {
/* table.addCell(new Cell(Integer.toString(rank.getRank())));*/
table.addCell(Integer.toString(rank.getRank()));
table.addCell(rank.getPage());
}
//document(pdf)에서 table을 넣어준다
document.add(table);
}
}
|
(5) 커스텀 뷰 servlet-context.xml에 빈으로 등록
1
2
|
<!-- pdf 파일 넘기기 -->
<beans:bean id="pageRanksPdf" class="com.bitcampi.mvc0802.PageRanksPdfView"/>
|
빈 이름은 Controller에서 return 했던 ModelAndView 객체의 첫 번째 칸에 적은 변수와 이름을 같게 한다.
결과)
댓글 없음:
댓글 쓰기