본문 바로가기
Java+Jsp

pd4ml를 사용한 한글 Html를 PDF로 변환

by xfree302 2011. 5. 18.
반응형

먼저 HTML을 PDF로 변환하는 라이브러리로 PD4ML이 있다.

http://www.pd4ml.com에서 pd4ml.pro.trial.360fx1.zip 파일을 다운받는다.

 

프로젝트에 pd4ml.jar 또는 pd4ml_demo.jar  파일과 ss_css2.jar을 포함시키고

다음과 같은 코드를 작성하면 PDF 파일이 생성되고 어도비리더로 보여준다.

 

==========java 코드=========

public void test() throws Exception {
  String url = "file:///d:/임시/aa.html"; //http://www.naver.com

  File pdfFile = new File("d:/output.pdf");
  generatePDF(url, pdfFile, PD4Constants.A4);

        String params = "C:\\Program Files\\Adobe\\Reader 8.0\\Reader\\AcroRD32.exe " + pdfFile.getAbsolutePath();
        Runtime.getRuntime().exec(params);
  
  System.out.println("done.");
 }


 private void generatePDF(String url, File outputPDFFile, Dimension format)
   throws Exception {

  java.io.FileOutputStream fos = new java.io.FileOutputStream(
    outputPDFFile);
  PD4ML pd4ml = new PD4ML();
  pd4ml.setPageInsets(new Insets(0, 0, 0, 0));
  pd4ml.setHtmlWidth(1200);
  pd4ml.setPageSize(pd4ml.changePageOrientation(format)); // landscape
                // page
                // orientation
  pd4ml.useTTF("java:fonts", true);//이 코드를 넣어야 한글이 정상적으로 만들어짐
  pd4ml.setDefaultTTFs("Times New Roman", "Arial", "Courier New");//여기에 한글 관련 font의 이름을 넣고 싶었으나... 시간상... 그냥 테스트 못함
  pd4ml.enableDebugInfo();

  long start = System.currentTimeMillis();
  pd4ml.render(new URL(url), fos);
  System.out.println("done in " + (System.currentTimeMillis() - start) + "ms");
 }

 

 

==========HTML=========

<html>
<body>
<font face="Gulim"><!-- 폰트를 지정함 -->
한글 Test
</font>
</body>
</html>

 

 

 

단 이렇게 한글이 변환되게 하려면 fonts.jar를 생성해서 프로젝트에 포함시켜야 한다.

 

========fonts.jar 생성 방법========

1. 첨부된 fonts.jar 파일을 D:/temp/ 폴더에 푼후

2. fonts/pd4fonts.properties 파일에 한글 관련 폰트를 추가한다.(아래에 샘플 있음)

   (파일명은 대소문자를 가리므로 주의!)

3. fonts 디렉토리에 c:/windows/fonts 폴더의 TTF 파일을 추가한다

   (TTC는 지원하지 않는다고 함 - 확인해 보지는 못했음)

   (한글 관련  TTF만 추가해도 될 듯... 모든 TTF를 추가하면 pd4fonts.jar가 100M 정도의 크기가 되어 버림)

 

   TTC 폰트를 사용하려면 변환툴을 사용하여 TTF 로 변환하여 사용한다.(역시 해보지는 않았음)

   (Gulim 체의 경우 TTC만 있고 TTF는 없으므로 TTC를 TTF로 변환하거나 다른 굴림체를 fonts/pd4fonts.properties 에 설정한다.)

4. fonts/ 폴더를 fonts.jar 파일로 만든다

5. 새로 생성된 fonts.jar 파일을 프로젝트의 build path에 포함시킨다.

 

=======fonts/pd4fonts.properties 파일 샘플=======

#this is an autogenerated file. please remove manually any references to copyrighted fonts
#Fri Apr 17 20:00:52 CEST 2009
Arial=arial.ttf
Arial\ Bold=arialbd.ttf
Arial\ Bold\ Italic=arialbi.ttf
Arial\ Italic=ariali.ttf
Arial\ Unicode=ARIALUNI.TTF
Batang=Batang.TTF
Batangche=Batangche.TTF
Courier\ New=cour.ttf
Courier\ New\ Bold=courbd.ttf
Courier\ New\ Bold\ Italic=courbi.ttf
Courier\ New\ Italic=couri.ttf
Daum_Regular=Daum_Regular.ttf
Daum_SemiBold=Daum_SemiBold.ttf
Dotum=Dotum.TTF
Dotumche=Dotumche.TTF
Century\ Gothic=GOTHIC.TTF
Century\ Gothic\ Bold=GOTHICB.TTF
Century\ Gothic\ Bold\ Italic=GOTHICBI.TTF
Century\ Gothic\Italic=GOTHICI.TTF
Gulim=NGulim.TTF
Gulimche=Gulimche.TTF
Gungso=Gungso.TTF
Gungsoche=Gungsoche.TTF
Malgun=MALGUN.TTF
Malgun\ Bold=MALGUNBD.TTF
MS\ Gothic=MSGothic.TTF
MS\ Mincho=MSMincho.TTF
MS\ PGothic=MSPGothic.TTF
MS\ PMincho=MSPMincho.TTF
MS\ UI\ Gothic=MSUIGothic.TTF
Yahei=MSYH.TTF
Yahei\ Bold=MSYHBD.TTF
Nanum\ Gothic=NanumGO.ttf
Nanum\ Gothic\ Bold=NanumGOBold.ttf
Nanum\ Gothic\ Extra\ Bold=NanumGOExtraBold.ttf
Nanum\ Myongjo=NanumMJ.ttf
Nanum\ Myongjo\ Bold=NanumMJBold.ttf
Nanum\ Myongjo\ Extra\ Bold=NanumMJExtraBold.ttf
SimHei=SIMHEI.TTF
SimSun\ Bold=SIMSUNB.TTF
Tahoma=TAHOMA.TTF
Tahoma\ Bold=TAHOMABD.TTF
Times\ New\ Roman=times.ttf
Times\ New\ Roman\ Bold=timesbd.ttf
Times\ New\ Roman\ Bold\ Italic=timesbi.ttf
Times\ New\ Roman\ Italic=timesi.ttf
Trebuchet\ MS=TREBUC.TTF
Trebuchet\ MS\ Bold=TREBUCBD.TTF
Trebuchet\ MS\ Bold\ Italic=TREBUCBI.TTF
Trebuchet\ MS\ Italic=TREBUCIT.TTF
Verdana=VERDANA.TTF
Verdana\ Bold=VERDANAB.TTF
Verdana\ Italic=VERDANAI.TTF
Verdana\ Bold\ Italic=VERDANAZ.TTF

출처 : http://poohya.egloos.com/288486
반응형