Load a font from JAR for FOP

前端 未结 1 1608

I have a TTF font in fonts directory in the JAR with my application.

 myapp.jar /
     fop /
        config.xml
        font.ttf
相关标签:
1条回答
  • 2020-12-20 16:28

    it seems that my post is too late, but may be it'll be useful for the others. [java 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>
    
    0 讨论(0)
提交回复
热议问题