使用 FopFactoryBuilder 指定配置文件

Specify a configuration file with FopFactoryBuilder

最初我是这样创建我的 FopFactory 的:

FopFactory.newInstance(new File("config/pdf/fop.xconf"))

它选择了我的配置文件中的所有自定义配置。但是,我的要求发生了变化,我需要使用 FopFactoryBuilder 来构建我的 FopFactory(它不将配置文件作为参数)。

FopFactoryBuilder builder = new FopFactoryBuilder(URI.create("/"), uriResolverAdapter);
Configuration configuration = new DefaultConfiguration("config/pdf/fop.xconf");
builder.setConfiguration(configuration);

但是,这似乎不起作用。我特别需要包括一些字体相关的东西:

<fonts>
  <auto-detect/>
  <font-base>./</font-base>
  <directory recursive="true">config/pdf/fonts</directory>
</fonts>

编辑:

我也试过了,

DefaultConfigurationBuilder defaultConfigurationBuilder = new DefaultConfigurationBuilder();
builder.setConfiguration(defaultConfigurationBuilder.build("config/pdf/fop.xconf"));

还有这个,

builder.setConfiguration(defaultConfigurationBuilder.buildFromFile(new File("config/pdf/fop.xconf")));

这个,

FileInputStream config = new FileInputStream(new File("config/pdf/fop.xconf"));
builder.setConfiguration(defaultConfigurationBuilder.build(config));

这个,

builder.setConfiguration(defaultConfigurationBuilder.buildFromFile("config/pdf/fop.xconf"));

最后这个(Jars.getJarFile 只是获取 运行 jar 的文件):

File jarFile = Jars.getJarFile(this);
if (jarFile!= null) {
    String absoluteLocation = jarFile.getParent() + "/config/pdf/fop.xconf";
    builder.setConfiguration(defaultConfigurationBuilder.buildFromFile(absoluteLocation));
}

但是当我用 FopFactory 创建一个新的 fop 时,这些都给了我一个例外:

java.lang.IllegalArgumentException: URI is not absolute

我最后做的是创建这样的配置:

DefaultConfigurationBuilder defaultConfigurationBuilder = new DefaultConfigurationBuilder();
builder.setConfiguration(defaultConfigurationBuilder.build("config/pdf/fop.xconf"));

并从我的配置中删除以下行:

<auto-detect/>