Apache camel 如何为Spring Boot/Camel Microservice中包含的字体配置FOP
我使用的是Camel FOP组件版本2.19.1,它引入了FOP2.1依赖项。应用程序必须是自包含的,可以作为fat WAR部署。或者JAR并停靠,或者在Tomcat容器中运行。我在“资源”项目文件夹中有字体,这意味着Maven将把字体文件放在我的类路径的根目录下,直接放在WAR中的/classes文件夹下 我的FOP配置文件正在正确加载,如果我只是将字体放在本地目录中,并对它们的绝对路径进行硬编码(如Apache camel 如何为Spring Boot/Camel Microservice中包含的字体配置FOP,apache-camel,apache-fop,Apache Camel,Apache Fop,我使用的是Camel FOP组件版本2.19.1,它引入了FOP2.1依赖项。应用程序必须是自包含的,可以作为fat WAR部署。或者JAR并停靠,或者在Tomcat容器中运行。我在“资源”项目文件夹中有字体,这意味着Maven将把字体文件放在我的类路径的根目录下,直接放在WAR中的/classes文件夹下 我的FOP配置文件正在正确加载,如果我只是将字体放在本地目录中,并对它们的绝对路径进行硬编码(如embed url=”,则可以找到字体file:///C:/fonts/HelveticaNe
embed url=”,则可以找到字体file:///C:/fonts/HelveticaNeueLTStd-Lt.ttf“
。但是,当我在embed URL=“HelveticaNeueLTStd-Lt.ttf”中尝试相对URL时,会抛出一个异常,表示“URI不是绝对的”。这没有什么意义,因为FOP文档说明可以使用相对URI,
就是为了这个!非常混乱
在过去的几天里,我尝试了很多没有成功的事情,比如甚至用类路径:
替换URI中的文件:
,但是与其他Apache项目不同,它似乎只支持文件:
。我甚至尝试从配置文件中完全删除字体注册,只使用
。虽然它可以在我的系统上找到所有字体(大约5分钟内!),但在我的类路径的根目录下找不到字体。此外,即使它确实有效,我还是希望FOP不要扫描所有已安装的系统字体并尝试创建临时缓存文件,因为它必须可以部署在云环境中的Docker容器中
在当前的FOP实现中,我试图做的是可能的吗
下面是我尝试的FOP配置文件的一个示例:
<fop version="1.0">
<renderers>
<renderer mime="application/pdf">
<font-base>./</font-base>
<fonts>
<!-- This of course works -->
<font kerning="yes" embed-url="file:///C:/fonts/HelveticaNeueLTStd-Lt.ttf">
<font-triplet name="Helvetica Neue LT Std" style="normal"
weight="normal" />
</font>
<!-- This results in java.lang.IllegalArgumentException: URI is not absolute -->
<font kerning="yes" embed-url="HelveticaNeueLTStd-Bd.ttf">
<font-triplet name="Helvetica Neue LT Std" style="normal"
weight="bold" />
</font>
<auto-detect />
</fonts>
</renderer>
</renderers>
./
我建议研究ApacheFop,以及它如何加载资源和支持什么,以及是否可以从类路径加载。如果您使用Docker,您可以将字体嵌入Docker图像中的文件夹中,然后可以从文件系统中的FOP加载字体。根据,可以使用
配置类路径中JAR文件中的字体,前提是它们在清单文件中有适当的描述。但是我自己没有尝试过,我应该提到,我尝试的第一件事是将字体包含在自己的JAR中,这些JAR包含在与建议的清单条目(通过Maven插件插入)的WAR中。总是抛出异常。奇怪的是,当在独立模式下使用FOP时,同一个JAR可以很好地工作,而FOP/lib文件夹中的JAR具有其他依赖项。我尝试的应该更容易,因为随着微服务的普及,我可以看到这是一个越来越常见的用例。