使用 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/>
最初我是这样创建我的 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/>