读取 OSGi 蓝图容器中的 Apache FOP 配置和字体
Read Apache FOP config and fonts in OSGi blueprint container
我有一个依赖 Apache FOP 的 OSGi 蓝图容器。当我使用默认配置生成 PDF 时,俄语符号(#### 而不是文本)出现问题。在非 OSGi 测试应用程序中,这个问题很容易解决:我在同一目录中使用自定义 fop.xconf 配置文件和两个 arial*.ttf 字体文件。 fop.xconf 中的自动检测也解决了这个问题。
但在 OSGi 蓝图容器中,我无法从捆绑资源中读取 conf 文件。谁能告诉我如何从蓝图容器中读取 xconf 和字体的示例?或者如何在不读取资源的情况下以编程方式配置字体。
所以,我找到了解决方案。
我们不能将 File() 与 "bundleresource://..." 路径一起使用,但我们可以使用 URI():
URL url = getClass().getClassLoader().getResource(FOP_XCONF_FILE);
fopFactory = FopFactory.newInstance(url.toURI(), url.openStream());
在这种情况下,我们从捆绑资源中打开 conf 文件输入流,并将其传递给特殊的 FopFactory.newInstance() 定义。 Fop.xconf XML 元素效果很好。
我有一个依赖 Apache FOP 的 OSGi 蓝图容器。当我使用默认配置生成 PDF 时,俄语符号(#### 而不是文本)出现问题。在非 OSGi 测试应用程序中,这个问题很容易解决:我在同一目录中使用自定义 fop.xconf 配置文件和两个 arial*.ttf 字体文件。 fop.xconf 中的自动检测也解决了这个问题。
但在 OSGi 蓝图容器中,我无法从捆绑资源中读取 conf 文件。谁能告诉我如何从蓝图容器中读取 xconf 和字体的示例?或者如何在不读取资源的情况下以编程方式配置字体。
所以,我找到了解决方案。 我们不能将 File() 与 "bundleresource://..." 路径一起使用,但我们可以使用 URI():
URL url = getClass().getClassLoader().getResource(FOP_XCONF_FILE);
fopFactory = FopFactory.newInstance(url.toURI(), url.openStream());
在这种情况下,我们从捆绑资源中打开 conf 文件输入流,并将其传递给特殊的 FopFactory.newInstance() 定义。 Fop.xconf XML 元素效果很好。