2013-07-19 4 views
4

내 응용 프로그램과 함께 JAR의 fonts 디렉토리에 TTF 글꼴이 있습니다.FOP 용 JAR에서 글꼴로드

FopFactory fopFactory = FopFactory.newInstance(); 
    fopFactory.setStrictValidation(false); 
    fopFactory.setUserConfig(getClasspathFile("/fop/config.xml")); 
    FOUserAgent foUserAgent = fopFactory.newFOUserAgent(); 
    ... 

어떻게 내가 렌더링하고있는 PDF 파일에 font.ttf을 embeddd하는 config.xml를 구성 않습니다

myapp.jar/
    fop/
     config.xml 
     font.ttf 

내 FOP이 방법을 만들?

답변

4

내 게시물이 너무 늦은 것 같지만 다른 사람들에게 유용 할 수 있습니다. [자바 8 FOP 2.1]

import lombok.SneakyThrows; 
... 
     @SneakyThrows 
      private FopFactory getFopFactory(){ 
       InputStream fopConfigStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("/fop/config.xml"); 
       FopFactoryBuilder builder = new FopFactoryBuilder(new File(".").toURI(), new CustomPathResolver()); 
       FopFactory factory = builder.setConfiguration(new DefaultConfigurationBuilder().build(fopConfigStream)).build(); 
       fopConfigStream.close(); 
       return factory; 
      } 
    ... 
     private static final class CustomPathResolver implements ResourceResolver { 
      @Override 
      public OutputStream getOutputStream(URI uri) throws IOException { 
       return Thread.currentThread().getContextClassLoader().getResource(uri.toString()).openConnection() 
         .getOutputStream(); 
      } 

      @Override 
      public Resource getResource(URI uri) throws IOException { 
       InputStream inputStream = ClassLoader.getSystemResourceAsStream("fop/" + FilenameUtils.getName(uri)); 
       return new Resource(inputStream); 
      } 
     } 

의 Config.xml :

<fop version="1.0"> 
    <renderers> 
     <renderer mime="application/pdf"> 
      <fonts> 
       <font kerning="yes" embed-url="font.ttf" embedding-mode="subset"> 
       <font-triplet name="Font name" style="normal" weight="normal"/> 
       </font> 
      </fonts> 
     </renderer> 
    </renderers> 
</fop>