HTML5.0

HTML --> PDF 파일로 변환 하기 . 펌) 정윤재님 노트

사라링 2013. 4. 5. 14:25

출처) 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

 

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

 

결과 화면