1
2
|
// JSP 첫화면
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
| cs |
contentType="text/html
<설명>
http://www.webmadang.net/community/community.do?action=read&boardid=5001&page=1&seq=3
==================라이브러리 pom.xml에 추가======================
<!-- PDF start -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.itextpdf.tool/xmlworker -->
<dependency>
<groupId>com.itextpdf.tool</groupId>
<artifactId>xmlworker</artifactId>
<version>5.5.6</version>
</dependency>
=========================Servlet-context=======================
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
//Servlet-context
<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="order" value="2" />
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
<beans:bean id="viewResolver" class="org.springframework.web.servlet.view.ResourceBundleViewResolver">
<beans:property name="order" value="1" />
<beans:property name="basename" value="views" />
</beans:bean>
<context:component-scan base-package="com.ds.mvc2.controller" />
<context:component-scan base-package="com.ds.dao" />
<context:component-scan base-package="com.ds.pdf" />
</beans:beans>
| cs |
d
<beans:property name="order" value="2" />
<beans:property name="order" value="1" />
먼저 order 의 value가 1인 것을 서칭
만약 없을시 value 2로 간다. 그래서 value 2에 jsp를 설정 하였기에
먼저 viewResolver를 검색 하게 한다.
<beans:bean id="viewResolver" class="org.springframework.web.servlet.view.ResourceBundleViewResolver">
<beans:property name="order" value="1" />
<beans:property name="basename" value="views" />
</beans:bean>
<context:component-scan base-package="com.ds.pdf" />
==========================================================
< 새로 만들기 - file 선택하여 views.properties로 하나 만들어 준다. 위치는 위에(views이름임의지정x>
1
2
3
|
//views.properties
pdfView.(class)=com.ds.pdf.PDFBuilder
| cs |
-========================================================
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
|
//MyPdfViewer.java
public abstract class MyPDFView extends AbstractView {
public MyPDFView() {
setContentType("application/pdf");
}
@Override
protected void renderMergedOutputModel(Map<String, Object> arg0, HttpServletRequest arg1, HttpServletResponse arg2)
throws Exception {
ByteArrayOutputStream baos = this.createTemporaryOutputStream();
Document document = new Document(PageSize.A4);
PdfWriter writer = PdfWriter.getInstance(document, baos);
writer.setViewerPreferences(PdfWriter.ALLOW_PRINTING | PdfWriter.PageLayoutSinglePage);
document.open();
buildPdfDocument(arg0, document, writer, arg1, arg2);
document.close();
// 크롬에 표시함.
this.writeToResponse(arg2, baos);
}
protected abstract void buildPdfDocument(Map<String, Object> model, Document document, PdfWriter writer,
HttpServletRequest request, HttpServletResponse response) throws Exception;
}
| cs |
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
|
//PDFBuilder.java
public class PDFBuilder extends MyPDFView {
@Override
protected void buildPdfDocument(
Map<String, Object> model,
Document document,
PdfWriter writer,
HttpServletRequest request,
HttpServletResponse response) throws Exception {
//한글처리
BaseFont bfont = BaseFont.createFont("NANUMBARUNGOTHIC.TTF",BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
Font font = new Font(bfont,12);
//컨트롤러부터 목록을 받음
@SuppressWarnings("unchecked")
List<SNS_Member> list = (List<SNS_Member>)model.get("member_list");
PdfPTable table = new PdfPTable(5); //칸수
table.setWidths(new float[] {15.0f, 15.0f, 15.0f, 15.0f, 40.0f} ); //테이블 가로길이 100%
table.addCell(new Phrase("아이디",font));
table.addCell("PW");
table.addCell("NAME");
table.addCell("PHONE");
table.addCell("DATE");
for(SNS_Member mem:list){
table.addCell(new Phrase(mem.getEmail(),font));
table.addCell(mem.getPw());
table.addCell(mem.getName());
table.addCell(mem.getPhone());
table.addCell(mem.getPhone());
}
document.add(table);
}
}
| cs |
한글처리하기 위해서 폰트를 다운받음
(나눔바른고딕을 선택함)http://hangeul.naver.com/font
다운받은 글꼴을 설치하면 C:/windows/font 파일이 있음
거기서 나눔바른고딕을 그래그해서 아래 위치에 넣어 줌
========================================================
1
2
3
4
5
6
7
8
9
|
//SNSController.java
@RequestMapping(value="/pdf", method=RequestMethod.GET)
public String pdf(Model model){
List<SNS_Member>list = snsDAO.getMemberList();
model.addAttribute("member_list", list);
return "pdfView"; //
}
| cs |
위에서 Servlet-context 설정을 하였기에 여기서 return 값은 jsp가 아니라 pdf가 될수있다.
<실행화면>
=================그래프 넣기=====================
새로운 라이브러리
pom.xml에 추가
<!-- https://mvnrepository.com/artifact/org.jfree/jfreechart -->
<dependency>
<groupId>org.jfree</groupId>
<artifactId>jfreechart</artifactId>
<version>1.0.19</version>
</dependency>
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
|
//PDFBuilder.java
try {
DefaultPieDataset dataset2 = new DefaultPieDataset();
dataset2.setValue("1a", 13);
dataset2.setValue("2b", 134);
dataset2.setValue("3c", 23);
dataset2.setValue("4d", 43);
dataset2.setValue("5e", 53);
JFreeChart chart2 = ChartFactory.createPieChart(
"Pie Chart", dataset2, true, true, false);
chart2.setBackgroundPaint(Color.WHITE);
chart2.setTitle("title");
String root = request.getSession().getServletContext().getRealPath("/");
root = root + "resources" + File.separator + "images" + File.separator;
System.out.println(root);
ChartUtilities.saveChartAsJPEG(new File(root+"chart.jpg"), chart2, 400, 300);
String imageUrl = "http://127.0.0.1:8080/mvc2/resources/images/chart.jpg";
Image img = Image.getInstance(new URL(imageUrl));
document.add(img);
} catch (Exception e) {
}
| cs |
댓글 없음:
댓글 쓰기