2017년 8월 3일 목요일

데이터베이스에 있는 자료 PDF로 출력하기/ 그래프넣기



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
DAO와 XML은 기존에 하던 방식대로 만들면 되고, 여기서는 생략함

위에서 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, truetruefalse);
            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, 400300);
            
            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












댓글 없음:

댓글 쓰기