1.0

2012-03-16 3 views
4

내가 사용하는 아파치 맵시 꾼과 글꼴 Arial.ttf를 발견하지 :1.0

  • 아파치 맵시 꾼 1.0
  • 자바 내가하는 유니 코드 u0100보다 높은 특수 문자로 처리 할 필요가

. 내가 사용해야하는 대상 글꼴은 Arial입니다. Arial이 대상 플랫폼 (예 : Linux)에있을 것으로 기대할 수 없기 때문에 Arial.ttf를 내 jar 파일에 포함 시켰습니다. 내 실제 설정 파일은 다음과 같습니다

<fop ...> 
<!-- Base URL for resolving relative URLs --> 
<base>./</base> 

<!-- Font Base URL for resolving relative font URLs --> 
<font-base>./</font-base> 

<renderers> 
    <renderer mime="application/pdf"> 
     <fonts> 

      <font kerning="yes" embed-url="arial.ttf" encoding-mode="auto"> 
       <font-triplet name="Arial" style="normal" weight="normal"/> 
       <font-triplet name="ArialMT" style="normal" weight="normal"/> 
      </font> 

      <!--<directory>C:/Windows/Fonts</directory>--> 

     </fonts> 
     <auto-detect/> 
    </renderer> 
... 
</fop> 

내가 맵시 꾼 내 설정 파일을로드하는 오류가 이런 식으로 이렇게 :

org.apache.fop.apps.FOPException: Failed to resolve font with embed-url 'arial.ttf' 

유일한 방법은 내가 때까지 작동 얻을 관리 이제는 폴더 경로를 설정 파일에 하드 코딩하는 것이 었습니다.

  <font kerning="yes" embed-url="C:/myapp/arial.ttf" encoding-mode="auto"> 
       <font-triplet name="Arial" style="normal" weight="normal"/> 
       <font-triplet name="ArialMT" style="normal" weight="normal"/> 
      </font> 

분명히이 해결책이 될 수 없습니다!

"Arial"이 있기 때문에 "directory"태그를 사용하면 Windows에서 작동합니다. 그러나 위에 언급 한 바와 같이 Linux, Mac 등에서도 실행해야합니다.

"자동 감지"태그는 (Windows가 아닌 경우에도) 작동하지 않으며 대상을 기대할 수없는 해결책이 아닙니다. Arial이 설치된 플랫폼.

이 문제를 해결하기위한 제안이 있으십니까?

답변

0

글꼴 > 태그 < 외부에 < 자동 검색/>이 있습니다. 글꼴 문제를 해결하기 위해 < 자동 검색/> 글꼴을 글꼴 > 태그 안에 넣습니다. 우리는 >

1

This solution/나를 위해 작동하지 않습니다 감지 자동 추가 < 글꼴을 > 구성을 사용하지만, 단지 <으로 감지 된 시스템 글꼴을 사용하지 마십시오. 이 null을 반환하기 때문입니다.

나는 another solution을 찾았지만 절대적인 시스템 경로 (예 : 사용자가 선택한 이미지)로 FOP에 추가하는 다른 리소스가있는 경우 사용자 지정 URIResolver이 그 그들은 잘못 해결됩니다. 당신이이 예제를 수정하려면

단지 그들을 혼합이 같은 솔루션을 작업 얻고있다 :

import java.io.InputStream; 
import javax.xml.transform.Source; 
import javax.xml.transform.TransformerException; 
import javax.xml.transform.URIResolver; 
import javax.xml.transform.stream.StreamSource; 

public class ClasspathUriResolver implements URIResolver { 

    @Override 
    public Source resolve(String href, String base) throws TransformerException { 
     Source source = null; 
     InputStream inputStream = getClass().getResourceAsStream(href); 
     if (inputStream != null) { 
      source = new StreamSource(inputStream); 
     } 
     return source; 
    } 
} 

사용

그것은 당신의 문제이다 그러나 나는 것을 발견하면
[...] 

FopFactory fopFactory = FopFactory.newInstance(); 

FOURIResolver uriResolver = (FOURIResolver) fopFactory.getURIResolver(); 
uriResolver.setCustomURIResolver(new ClasspathUriResolver()); 

[...] 
0

확실하지 이후 일부 버전 상대 경로는 Fop 설정 파일에서 작동하지 않습니다.필자는 절대 경로 ('/'로 시작) 또는 'file :'와 같은 'file :'경로를 접두어로 사용하면 작동합니다.