2010-07-23 2 views
4

비행 접시 xhtmlrenderer에서 생성 된 pdf에서 사용자 정의 truetype 글꼴을 사용하고 있습니다. 비행 접시 (xhtmlrenderer)는 내 글꼴를 굵게 표시하지 않습니까?

ITextRenderer renderer = new ITextRenderer(); 
renderer.getFontResolver().addFont("myfont.ttf", BaseFont.CP1252, BaseFont.EMBEDDED); 
renderer.setDocument(XMLResource.load(in).getDocument(), url); 
renderer.layout(); 
renderer.createPDF(out); 

와 HTML이 렌더링되는 내

, 내가 가지고있는

<html> 
<head> 
<style type="text/css"> 
*{font-family:myfont;} /* <-- this works, trust me */ 
</style> 
</head> 
<body> 
<p>some plain text<b>some bold text</b> <span style="font-weight:bold;">more bold</span></p> 
</body> 
</html> 

(예를 들어)하지만, 심지어 <b>font-weight:bold I 굵게 나오는 텍스트를 얻을 수와 다음.

지금, 나는이 같은 글꼴을 사용하여 유사 (레거시) 프로젝트, 그리고 평범한 구식하여 itext (즉, 어떤 xhtmlrenderer)을 가지고 있기 때문에이 작동합니다 알고 그것을 통해 굵은 텍스트로 PDF 파일을 생성 않습니다

myFont = BaseFont.createFont("myfont.ttf", BaseFont.CP1252, BaseFont.EMBEDDED); 
Font boldFont = new Font(myFont); 
boldFont.setStyle(Font.BOLD); 

com.lowagie.text.Document document = ...; 
document.add(new Paragraph("plain", myFont)); 
document.add(new Paragraph("bold", boldFont)); 

누구나 xhtmlrenderer와 함께 굵은 글꼴을 사용할 수없는 이유를 설명 할 수 있습니까?이 문제를 극복하기위한 방법 일 수 있습니까?

감사합니다.

+0

동일한 문제가 있기 때문에 제공 한 샘플 코드에 대해이 질문에 + 10을 추가 하겠지만, 렌더링하는 동안 문서를 동적으로 변경해야하는 이유가 무엇입니까? 나는 많은 시간을 플라잉 서커 코드를 통해 보냈지 만, 내가 당신의 스 니펫을 보았을 때 나는 itext로 woring하는 것이 훨씬 더 쉬울 것이라는 것을 깨달았습니다. 고맙습니다. – sdespolit

답변

4

전 전문가가 아니지만 글꼴에 대담한 변형이없는 경우 Flying Saucer는 단순히 "굵게 표시하지 않을"수 있습니다. 프로그래밍 방식으로 글꼴을 굵은 글꼴로 만들면 글꼴 내부에서 일종의 내부 메커니즘을 사용하여 글꼴을 "굵게"만들 수있는 글꼴 클래스를 사용하게됩니다. 실세계의 좋은 예가 Photoshop입니다. 대담한 글꼴이없는 글꼴을 굵게 표시 할 수는 없지만 Photoshop에는 "시뮬레이션 된 굵은 글꼴"옵션이 있습니다.이 옵션은 들어가서 두껍게 만듭니다 실제로 "진실한"대담한 얼굴을 사용하지 않고 기호.

이것을 진단하는 좋은 방법은 Flying Saucer에서 사용하고있는 글꼴을 전환하지만 동일한 문서를 유지하는 것입니다. 새 글 꼴도 굵게 표시되지 않으면 문제점이 덜 국한됩니다. 글꼴이 굵게 표시되면 대담한 글꼴 버전이 없기 때문입니다.

희망이 도움이됩니다.

+0

비행 접시는 itext를 사용하여 pdf를 생성합니다. 나는 비행 접시가 같은 메커니즘 (예 : font.setStyle)을 사용하여 '굵은 체'변형을 적용한다고 가정하고있었습니다. 명확하게 나는 틀린데, 나는 당신의 답을 논박하지 않는다. 사실 나는 100 % 동의하지만, 설명이 아니라 해결책을 찾고있다. 나의 다음 중지는 비행 접시 소스 코드를 통해 가고있다. 그러나 나는 이것을하기 위해 다른 누군가를 위해 50의 담당자를 지불한다.) 어떻게해서든지 고마워한다. – pstanton

+0

대담한 변형을 제공하고이 문제를 해결하는 ttf 파일을 발견했습니다. – pstanton

2

기존 iText 코드에서 굵은 글꼴을 생성 할 수있는 경우 Flying Saucer에서 글꼴을 사용하지 않아도 TTF 파일에 실제로 굵은 글꼴이 포함되어있는 것 같습니다. CSS 스타일 시트에서 굵은 글꼴의 정확한 이름을 지정하면 Flying Saucer에서 굵은 글꼴을 사용할 수 있습니다. 예를 들어

:

<style type="text/css"> 
* {font-family:myfont;} 
b {font-family:"myfont bold";} 
</style> 

당신은 Adobe Reader에서 레거시 코드에 의해 생성 된 PDF를 열어 글꼴의 정확한 이름을 찾을 수 있어야합니다. 파일 -> 등록 정보 ... -> 글꼴로 이동하여 문서의 모든 글꼴 목록을 봅니다. 아마도 "myfont"항목과 "myfont bold"항목 또는 유사한 항목이있을 것입니다. 스타일 시트에서 후자를 사용하십시오.

관련 문제