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();
}
}
}
======================================================
결과 화면
'JAVA' 카테고리의 다른 글
[ JAVA ] 숫자 인지 아닌지 확인 ( isNaN ) (0) | 2012.11.24 |
---|---|
[ JAVA ] jfreechart pie, bar 차트 예제 (영역 색깔 넣기) (1) | 2012.11.09 |
[ JAVA ] According to TLD or attribute directive in tag file, attribute test does not accept any expressions (0) | 2012.08.03 |
[ JAVA ] Socket 의 timeout 설정 (0) | 2012.07.20 |
[ JAVA ] apache commons cli ( command line interface ) (0) | 2012.06.27 |
댓글