출처) http://shonm.tistory.com/category/JAVA/PDF%20%EB%B3%80%ED%99%98


추가글 : http://guni.tistory.com/223  < itext 설명 



itext 라는 library 로 html -> pdf 로 변환이 가능 하다.

 

소스는 아래와 같다.

 

필요한 한글 font 파일과 library 파일들은 첨부 한다.

 

 

1. 한국어는 역시 폰트 문제 때문에 고생이다. font 설정을 위한 class 파일 생성이

필요하다.

 

package com.incross.pdf;

import java.io.IOException;

import com.itextpdf.text.BaseColor;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Font;
import com.itextpdf.text.FontFactoryImp;
import com.itextpdf.text.pdf.BaseFont;

 

public class DefaultFontProvider extends FontFactoryImp {
 private String _default;
 public DefaultFontProvider(String def) {
  _default = def;
 }
 // I believe this is the correct override, but there are quite a few others.
 public Font getFont(String fontname,String encoding, boolean embedded, float size,int style, BaseColor color) {
  try {

   return new Font(BaseFont.createFont(_default, BaseFont.IDENTITY_H, BaseFont.EMBEDDED), 9, style, BaseColor.BLACK);
  } catch (DocumentException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  return null;
 }
}

 

====================================================================

 

2. pdf 만드는 로직이 필요하다.

 

package com.incross.pdf;


import java.io.FileOutputStream;
import java.io.StringReader;
import java.util.HashMap;
import java.util.List;
import com.incross.pdf.DefaultFontProvider;
import com.itextpdf.text.Document;
import com.itextpdf.text.Element;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.html.simpleparser.HTMLWorker;
import com.itextpdf.text.html.simpleparser.StyleSheet;
import com.itextpdf.text.pdf.PdfWriter;


public class ConvertHTMLToPDF {
 public static void main(String[] args) {     
  String file = "c:\\test.pdf";   
  
  PdfWriter pdfWriter = null;       
  
  
  try{
  
    //create a new document   
    Document document = new Document();       
      
    //get Instance of the PDFWriter    
    pdfWriter = PdfWriter.getInstance(document, new FileOutputStream(file));         
 
    document.setPageSize(PageSize.A4);      
 
    document.open();        


    HTMLWorker htmlWorker = new HTMLWorker(document);
    
    
    HashMap<String,Object> interfaceProps = new HashMap<String,Object>();
     
   
    StyleSheet styles = new StyleSheet();
    
   
    
    DefaultFontProvider dfp=new DefaultFontProvider("c:\\malgun.ttf");
    //폰트 파일 설정 (한글 나오게 하기 위해 설정 필요함
    interfaceProps.put(HTMLWorker.FONT_PROVIDER,dfp);


    
    StringBuffer sb = new StringBuffer();
       sb.append("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">");
       
       sb.append("<html xmlns=\"http://www.w3.org/1999/xhtml\">");    
    
       sb.append("<html>");
    
    sb.append("<head>");
    
    sb.append("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />");
    //sb.append("<link rel=\"stylesheet\" type=\"text/css\" href="+StringUtil.getPropWord("pdf.css.path")+" />");
    sb.append("</head>");
    
    sb.append("<body>");
    
    sb.append("<table border='1'>");
    
    sb.append("  <tr>");
    
    sb.append("    <td> 테스트  </td>");
    
    sb.append("  <tr>");
    
    sb.append("</table>");
    
    sb.append("<img src='http://static.naver.net/www/u/2010/0611/nmms_215646753.gif'/>");

    sb.append("</body>");
    
    
    sb.append("</html>");
    
    System.out.println("html:"+sb.toString());
    

    StringReader strReader = new StringReader(sb.toString());

    List<Element> objects = htmlWorker.parseToList(strReader, styles, interfaceProps);
    
    for (int k = 0; k < objects.size(); ++k){
     
     document.add((Element) objects.get(k));

    }

    document.close();   
    //close the writer    
    pdfWriter.close();     
  }catch(Exception e){
   e.printStackTrace();
  }
 }    
 


 }

 

 

 dom4j.jar

 

 itext-pdfa-5.3.3.jar

 

 itext-xtra-5.3.3.jar

 

 itextpdf-5.3.3.jar

 

 jaxen-full.jar

 

 jdom.jar

 

 xmlworker-1.2.0.jar

 

 malgun.ttf

 

======================================================

 

결과 화면

'HTML5.0' 카테고리의 다른 글

windy 실시간 기상 영상  (0) 2019.10.09
div 불투명 깔기 . 소스  (0) 2012.06.08
html animation  (0) 2012.06.08
div의 overflow 및 postion  (0) 2012.06.07
캔버스 위에 div 를 올리자.  (0) 2012.06.05
Posted by 사라링
BLOG main image
.. by 사라링

카테고리

사라링님의 노트 (301)
JSP (31)
J-Query (41)
JAVA (24)
VM-WARE (0)
디자인패턴 (1)
스크랩 (0)
스트러츠 (3)
안드로이드 (11)
오라클 (45)
우분투-오라클 (1)
이클립스메뉴얼 (6)
스프링3.0 (23)
자바스크립트 (10)
HTML5.0 (17)
정보처리기사 (1)
기타(컴퓨터 관련) (1)
문제점 해결 (3)
프로젝트 (2)
AJAX (4)
하이버네이트 (3)
트러스트폼 (11)
Jeus (2)
재무관리(회계) (5)
정규식 (5)
아이바티스 (8)
취미 (2)
소프트웨어 보안 관련모음 (0)
정보보안기사 (6)
C언어 베이직 및 프로그램 (3)
보안 관련 용어 정리 (2)
넥사크로 (6)
Total :
Today : Yesterday :