我使用top -2.1从xml和xsl-fo生成PDF文件,并花了很多时间配置top配置文件(我使用西里尔字体),根据https://xmlgraphics.apache.org/fop/2.1/configuration.html
在命令行中测试了它,它工作正常:
-c conf.xml -xml XML -xsl XSL -pdf pdf
接下来,我需要在java web应用程序中做同样的事情。应用程序是多模块Maven项目。
当我试图获得FopFactory实例时,我的配置文件位于服务模块的资源文件夹中,这里是一个项目树
服务模块
src/main/资源配置/config . xmlweb模块
如何用我的配置文件创建FopFactory实例?
首先我这样做:
FopFactory fopFactory = fopFactory = FopFactory.newInstance(
new File("/full/path/../resources/conf/config.xml"));
在这个项目中我们使用EJB容器,当然还有
企业bean不能使用java。IO包试图访问文件系统中的文件和目录。
那我试试这个
DefaultConfigurationBuilder cfgBuilder = new DefaultConfigurationBuilder();
Configuration cfg = null;
try {
cfg = cfgBuilder.build(getClass().getClassLoader().getResourceAsStream("conf/config.xml"));
} catch (Exception e) {
e.printStackTrace();
}
FopFactoryBuilder factoryBuilder = new FopFactoryBuilder(URI.create("/")).setConfiguration(cfg);
FopFactory fopFactory = factoryBuilder.build();
PDF生成应用位于服务模块。我需要在baseURI中设置什么?
fopFactoryBuilder = new FopFactoryBuilder(baseURI).setConfiguration(cfg);
我遇到了一个类似的问题,并创建了一个工作演示
- 使用top 2.2
- 从类路径加载所有内容(甚至是嵌入到pdf中的ttf字体)
在这里:
https://github.com/riskop/fop_test参见this:
将FopFactoryBuilder baseURI设置为jar类路径