2014-02-24 11 views
1

나는 flying-saucer lib를 사용하여 pdf를 생성하고 있습니다. 하지만 일부 HTML 엔티티에 문제가 있습니다.비행 접시 - HTML 엔티티가 렌더링되지 않습니다.

나는 해결책을 찾고 있었는데이 포럼과 다른 곳에서 많은 팁을 발견했지만 여전히 문제가 있습니다.

나는이 방법을 시도했다 : http://sdtidbits.blogspot.com/2008/11/flying-saucer-xhtml-rendering-and-local.html

하지만

내 코드 모양이 같은 어떤 성공없이

:

PDF는 새로운 PDF의 이름입니다
os = new FileOutputStream(pdf); 

ITextRenderer renderer = new ITextRenderer(); 
ChainingReplacedElementFactory chainingReplacedElementFactory = new ChainingReplacedElementFactory(); 
chainingReplacedElementFactory.addReplacedElementFactory(new B64ImgReplacedElementFactory(renderer.getSharedContext())); 

renderer.getSharedContext().setReplacedElementFactory(chainingReplacedElementFactory); 
renderer.setDocument(url); 
renderer.layout(); 
renderer.createPDF(os); 

생성 및 URL은

 File f = new File(url); 
     if (f.exists()) { 
      url = f.toURI().toURL().toString(); 
     } 
입니다. 이

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta name="generator" content="HTML Tidy, see www.w3.org" /> 
<style type="text/css"> 
html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, font, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, caption, tbody, tfoot, thead, tr, th 
{ 
    color: #444; 
    font-family: Arial; 
    font-size: 14px; 
    line-height: 25px; 
    border: none; 
} 

table, td {border: solid 1px #CCC;} 

img {page-break-inside: avoid;} 
</style> 

<title></title> 
</head> 
<body> 
<h1>Test</h1> 

<p>Html etites to test</p> 
<p>&#8592;</p> 

<p>&larr;</p> 

<p>&uarr;</p> 
<p>&#8593;</p> 
<p>&#8595;</p> 
<p></p> 

</body> 
</html> 

모두 같은

내 HTML 파일을 보면 그 실체 옆에 잘 작동합니다. 아무 것도 화살표로 표시해야하는 빈 곳으로 만 렌더링됩니다. 누구에게도 해결책이 있습니까?

답변

1

기본적으로 iText에서 사용하는 글꼴은 인쇄하려는 캐랙터를 지원하지 않습니다.

해결책은이 문자를 표시 할 수있는 다른 글꼴을 포함하는 것입니다 (예 : DejaVu). 자바 파일에서

는 렌더러에 글꼴을 선언

ITextRenderer renderer = new ITextRenderer(); 
renderer.getFontResolver().addFont("font/DEJAVUSANS.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED); 

renderer.setDocument(url); 
renderer.layout(); 
renderer.createPDF(os); 

그리고 HTML에서 글꼴 - 가족 선언 변경 :

body 
{ 
font-family: DejaVu Sans; 
} 
+0

고마워요, 내 문제를 해결했다. 이제 모든 것이 괜찮습니다. – user3333010

+0

도와 드리겠습니다. 주저하지 말고 답변을 수락하십시오 ([여기] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235) 참조). – obourgain