2014년 7월 17일 목요일

[오라클자바커뮤니티,자바기초교육,java servlet에서 pdf 다루기,오라클자바커뮤니티 자바서블릿강좌]

[오라클자바커뮤니티,자바기초교육,java servlet에서 pdf 다루기,오라클자바커뮤니티 자바서블릿강좌]
 
PDF(Portable Document Format) Adobe systems에서 만든 파일 형식인 줄은 다 아실 겁니다.
:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 
PDF 페이지 내의 모든 요소는 모두 객체들로 이루어 져 있습니다.

객체들은 순차적으로 표현되고 마지막에는 파일내의 각 객체들을 OFFSET을 나열하는 상호참조 테이블로 구성하며 마지막 부분은 root 객체를 가리키고 있고 또한 상호 참조 테이블의 시작까지의 OFFSET을 포함 합니다.
 
PDF의 장점이라면 HTML, XML보다 유연하게 문서의 출력 형식을 제어 할 수 있다는 것이며 Adobe Acrobat Reader PDF를 읽고 쓰는 프로그램 입니다.
 
PDF 문서는 LZW 알고리즘을 이용하여 압축 하며 PDF를 텍스트 에디터로 열어 보면 알아볼 수 없는 문자가 나오는 것이 바로 이 때문 입니다.
 
PDF 파일에서 정확한 정보들을 읽어 내기 위해서는 PDF내의 텍스트 기반의 명령어들을 검색하여 적합한 데이터의 압축을 풀어야 합니다.
 
자바에서 사용 할 수 있는 PDF API로는 상법용과 무료버전 몇 가지가 있는데 간단히 소개하면 다음과 같습니다.
 
l  http://www.klg.com 시트라카/KL 그룹
l  http://www.InetSoftCorp.com StyleWriterEE
l  http://www.pdflib.com/pdflib C로 작성된 PDFlib가 있으며 자바 Wrapper를 사용 합니다상업용이 아니라면  무료
l  http://www.reportlab.org 에서는 자바 버전은 없지만 파이썬으로 만들어진 것은 있습니다.
l  http://www.etymon.com PDF의 전체 스펙을 제공하지는 않지만 PDF를 검색하고 수정하는 것을 자바 프로그램을 통해 편리하게 할 수 있습니다.
 
 
본 강좌에서는 http://www.pdflib.com/pdflib pdflib를 이용하여 서블릿으로(물론 JSP로 만들어도 무방 합니다.) PDF 파일을 만들어 보겠습니다.
 
환경에 대해 말씀 드리면
 
 Tomcat4.1에서 작업을 했으며 그 이상의 버전에도 문제가 없으리라 생각 됩니다
(혹시 톰캣이 설치되어 있지 않으신 분들은 본 사이트의 Tomcat 설치 강좌를 참고 하시어 설치하시기 바랍니다.)
 
1.     http://www.pdflib.com/products/pdflib/download/601/PDFlib-6.0.1p1-Windows.zip 에서 pdflib를 다운 받습니다.
 
2.     다운받은 파일을 적당 한곳에 압축을 풉니다.
압축을 푼 후  PDFlib-6.0.1p1-Windows\bind\java 폴더로 이동 합니다.
 
그곳에 보면 pdflib.jar 파일이 있는데 이 파일을 톰캣 홈 아래 common/lib에 복사 합니다.
 
3.     마찬가지로 PDFlib-6.0.1p1-Windows\bind\java 아래의 pdf_java.dll 파일을 windows 폴더아래의 system32 폴더에 복사 합니다.
 
4.     서블릿 파일을 만들어 명령프롬프트에서 컴파일 해야 하므로 톰캣 홈 아래 common/lib/servler.jar 파일을 환경변수의 클래스패스에 추가 합니다.(톰캣이상이면 common/lib/servlet-api.jar 파일 임)
 
5.     이제 서블릿 파일을 아래 처럼 작성 합니다톰캣홈/webapps/ROOT/WEB-INF/classes 에 만듭니다.
 
/**
PDF.java
**/
 
/* $Id: helloServlet.java,v 1.11 :namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />2004/05/17 12:47:19 rp Exp $
 *
 * PDFlib client: hello servlet example in Java
 */
 
import java.io.*;
import javax.servlet.*;
 
import com.pdflib.pdflib;
import com.pdflib.PDFlibException;
 
public class PDF extends GenericServlet
{
    public void service(ServletRequest request, ServletResponse response)
    {
       int font;
       pdflib p = null;
       byte[] buf;
       ServletOutputStream out;
 
       try{
           p = new pdflib();
           // Generate a PDF in memory; insert a file name to create PDF on disk
           if (p.begin_document("d:/test.pdf", "") == -1) {
                     throw new Exception("Error: " + p.get_errmsg());
           }
 
           p.set_info("Creator", "helloServlet.java");
           p.set_info("Author", "Thomas Merz");
           p.set_info("Title", "Hello world (Java/Servlet)!");
 
           p.begin_page_ext(595, 842, "");            
 
           font = p.load_font("Helvetica-Bold", "unicode", "");
 
           p.setfont(font, 18);
 
           p.set_text_pos(50, 700);
           p.show("Hello world!");
           p.continue_text("(says Java/Servlet)");
           p.end_page_ext("");                             
 
           p.end_document("");                            
 
           buf = p.get_buffer();
 
           response.setContentType("application/pdf");
           response.setContentLength(buf.length);
 
           out = response.getOutputStream();
           out.write(buf);
           out.close();
        } catch (PDFlibException e) {
            System.err.print("PDFlib exception occurred in hello sample:\n");
            System.err.print("[" + e.get_errnum() + "] " + e.get_apiname() +
                            ": " + e.get_errmsg() + "\n");
        } catch (Exception e) {
            System.err.println(e.getMessage());
        } finally {
            if (p != null) {
                p.delete();                    
            }
        }
    }
}
 
6.     서블릿을 컴파일 하신 후 실행 하기 위해 서블릿 등록 및 매핑을 합니다톰캣홈/webapps/ROOT/WEB-INF/web.xml 파일에 다음을 추가 합니다. (<web-app> 와 </web-app> 사이에 넣습니다.)
 
<servlet>
        <servlet-name>PDF</servlet-name>
        <servlet-class>PDF</servlet-class>
    </servlet>
 
    <servlet-mapping>
        <servlet-name>PDF</servlet-name>
        <url-pattern>/servlet/PDF</url-pattern>
    </servlet-mapping>
 
7.     톰캣을 Shutdown 후 다시 Start 하시구요,,, 브라우저에서 http://localhost/servlet/PDF 라고 하신 후 화면에 오류가 없는 것을 확인 후 d:\ 에 가시면 test.pdf가 있을 겁니다.
 
열어 보시면 환하게 웃고 있는 Hello World를 보실 수가 있을 겁니다ㅎㅎ
 
성공 하시기를 바라구요,
 
감사합니다.
 
참고로 JSP 예제는 아래를 참고 하세요~
 
<%@ page language="java" contentType="text/html; charset=euc-kr" %>
<%@ page import="java.io.*, javax.servlet.*, com.pdflib.* " %>
 
<%
    int font;
    pdflib p = null;
    byte[] buf;
    ServletOutputStream output;
 
 
       try {
                     p = new pdflib();
 
                     // Generate a PDF in memory; insert a file name to create PDF on disk
                     if (p.begin_document("d:/test.pdf", "") == -1) {
                                  System.err.println("Error: " + p.get_errmsg());
                                  System.exit(1);
                     }
 
                     p.set_info("Creator", "hello.jsp");
                     p.set_info("Author", "JCLEE");
                     p.set_info("Title", "PDF Demo JSP!");
 
                     p.begin_page(595, 842);               
 
                     font = p.load_font("Helvetica-Bold", "unicode", "");
 
                     p.setfont(font, 18);
 
                     p.set_text_pos(50, 700);
                     p.show("Hello world!");
                     p.continue_text("(says Java/JSP)");
                     p.end_page();                              
 
                     p.close();                                                  
 
                     buf = p.get_buffer();
 
                     response.setContentType("application/pdf");  //--> 요기가 키 포인틉니다.
                     response.setContentLength(buf.length);
 
                     output = response.getOutputStream();
                     output.write(buf);
                     output.close();
 
       }
       catch (PDFlibException e) {
                     System.err.println("PDFlib exception occurred in hello sample:\n");
                     System.err.println("[" + e.get_errnum() + "] " + e.get_apiname() +
                                                                          ": " + e.get_errmsg() + "\n");
       } catch (Exception e) {
                     System.err.println(e.getMessage());
       } finally {
                     if (p != null) {
                                  p.delete();                     
                     }
       }
%>
 
 
  
[출처] 오라클자바커뮤니티 - http://www.oraclejavacommunity.co.kr/bbs/board.php?bo_table=LecServletJSP&wr_id=259 

오라클자바커뮤니티교육센터, 개발자전문교육, 개인80%환급
www.oraclejavacommunity.com


평일주간(9:30~18:10) 개강
(7/21)[기업100%환급]자바기초에서 JDBC, Servlet/JSP까지 
(7/21)[기업100%환급]Spring ,MyBatis,Hibernate실무과정
(7/21)[기업100%환급]PL/SQL,ORACLE HINT,TUNING
(7/21)[채용예정교육]오라클자바개발잘하는신입뽑기프로젝트,교육전취업확정
(7/28)[기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍
(7/28)[기업100%환급]안드로이드개발자과정
(7/28)[기업100%환급]SQL기초에서 Schema Object까지

평일야간(19:00~21:50) 개강
(7/22)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
(7/22)닷넷(C#,Network,ADO.NET,ASP.NET)마스터과정
(7/24)SQL기초에서실무까지
(7/29)안드로이드개발자과정
(7/29)Spring3.X, MyBatis, Hibernate실무과정
(8/04)웹퍼블리싱 마스터
(8/05)MyBatis3.X, Hibernate4.X ORM실무과정

주말(10:00~17:50) 개강
(7/19)JSP,Ajax,jQUERY,Spring,MyBatis,Hibernate속성과정
(7/19)SQL초보에서 Schema Object까지
(7/19)C#,ASP.NET마스터
(7/19)Spring3.X, MyBatis, Hibernate실무과정
(7/19)안드로이드개발자과정
(7/26)개발자를위한PLSQL,SQL튜닝,힌트
(8/02)웹퍼블리싱 마스터
(8/02)MyBatis3.X, Hibernate4.X ORM실무과정
(8/09)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
(8/23)JAVA,Network&WEB&Framework(자바기초에서웹스프링까지)

주말저녁(18:30~22:20) 개강
(8/02)JAVA,Network&WEB&Framework
(8/09)SQL기초에서실무까지

댓글 없음:

댓글 쓰기