如何将Fop配置文件加载到FopFactory

时间:2016-11-03 11:44:01

标签: java configuration ejb uri apache-fop

我使用Fop-2.1从xml和xsl-fo生成PDF文件并花费大量时间配置fop配置文件(我使用西里尔字体),根据{{3} }

在命令行中测试它,它工作正常:

  

fop -c conf.xml -xml xml -xsl xsl -pdf pdf

接下来我需要在java web应用程序中做同样的事情。应用程序是多模块Maven项目。

我试图通过位于服务模块资源文件夹中的配置文件获取FopFactory实例时遇到困难,这里是项目树

  

服务模块

     
    

的src /主/资源

         
      

CONF / config.xml中

    
  
     

网络的模块

如何使用我的配置文件创建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);

1 个答案:

答案 0 :(得分:1)

我遇到了类似的问题并创建了一个工作演示

  • 使用fop 2.2。
  • 从类路径加载所有内容(甚至是ttf字体以嵌入到pdf中)

这是:

https://github.com/riskop/fop_test

另见:

Set FopFactoryBuilder baseURI to jar classpath