2013-12-10 7 views
2

iText 및 비행 접시를 사용하여 HTML 페이지를 pdf로 변환하려고합니다. HTML 페이지에 대한 코딩flying-saucer + iText를 사용하여 다국어 텍스트를 사용하는 HTML에서 PDF 생성. 중국어 글꼴 만 작동합니다.

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"><head> 
<title>中文測試</title> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<style type="text/css"> 
    name 
    { 
     font-family: "Arial Unicode MS"; 
     color: blue; 
     font-size: 48; 
    } 
</style> 
</head> 
<body> 
    <name>名偵探小怪獸</name> 
    <h1>भारतीय जनता पार्टी ने फिर कहा है कि बहुमत न होने के कारण वो दिल्ली में सरकार बनाने की 
     इच्छुक नहीं है और दोबारा चुनाव के लिए तैयार है. 
    </h1> 
<h1>Japanese 日本国</h1> 
</body> 
</html> 

이며,이 자바 코드는

import java.io.*; 
import org.xhtmlrenderer.pdf.*; 
import com.lowagie.text.pdf.*; 
public class ChineseToPdf { 
    public static void main(String[] args) { 
     try { 
      String inputFile = "chinese.html"; 
      String url = new File(inputFile).toURI().toURL().toString(); 
      String outputFile = "test.pdf"; 
      OutputStream os = new FileOutputStream(outputFile); 
      ITextRenderer renderer = new ITextRenderer(); 
      ITextFontResolver resolver = renderer.getFontResolver(); 
      resolver.addFont("C:/Windows/Fonts/arialuni.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED); 
      renderer.setDocument(url); 
      renderer.layout(); 
      renderer.createPDF(os); 
      os.close(); 
     } catch (Exception e) { 
      System.out.println(e.getMessage()); 
     } 
    } 
} 

하고 출력 만 중국어 글꼴이 제대로, 힌디어와 일본 등의 공백을 올 렌더링됩니다.

도와주세요.

답변

2

정의한 스타일은 name 태그에만 적용되며 힌디어 및 일본어 텍스트는이 태그 외부에 있습니다. 모든 유니 코드 문자를 지원하지 않는 기본 글꼴로 렌더링됩니다.

이 버그를 해결하려면, 당신은 모든 문서에 대해 글꼴 "굴림 유니 코드 MS"를 사용하도록 스타일을 변경할 수 있습니다

body{font-family: "Arial Unicode MS";} 
+0

내 바보 같은 실수를 지적 해 주셔서 감사합니다. –

0

허용 대답 일을했다. 그러나 한 가지 더 지적해야 할 점은 다음과 같습니다.

글꼴 모음 설정은 "Arial Unicode MS"로 시작해야합니다. CJK를 지원하지 않는 글꼴로 시작하면 pdf 출력은 여전히 ​​해당 문자를 표시하지 않습니다.