本文介绍了为 FOP 从 JAR 加载字体的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我的应用程序在 JAR 的 fonts
目录中有一个 TTF 字体.
I have a TTF font in fonts
directory in the JAR with my application.
myapp.jar /
fop /
config.xml
font.ttf
我以这种方式创建我的 FOP:
I create my FOP this way:
FopFactory fopFactory = FopFactory.newInstance();
fopFactory.setStrictValidation(false);
fopFactory.setUserConfig(getClasspathFile("/fop/config.xml"));
FOUserAgent foUserAgent = fopFactory.newFOUserAgent();
...
如何配置 config.xml
以在我渲染的 PDF 文件中嵌入 font.ttf
?
How do I configure config.xml
to embeddd font.ttf
in the PDF file I am rendering?
推荐答案
看来我的帖子来得太晚了,但可能对其他人有用.[java 8,fop 2.1]
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:
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>
这篇关于为 FOP 从 JAR 加载字体的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!