Apache camel 如何为Spring Boot/Camel Microservice中包含的字体配置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

我使用的是Camel FOP组件版本2.19.1,它引入了FOP2.1依赖项。应用程序必须是自包含的,可以作为fat WAR部署。或者JAR并停靠,或者在Tomcat容器中运行。我在“资源”项目文件夹中有字体,这意味着Maven将把字体文件放在我的类路径的根目录下,直接放在WAR中的/classes文件夹下

我的FOP配置文件正在正确加载,如果我只是将字体放在本地目录中,并对它们的绝对路径进行硬编码(如
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具有其他依赖项。我尝试的应该更容易,因为随着微服务的普及,我可以看到这是一个越来越常见的用例。