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

标签 java configuration ejb uri apache-fop

我正在使用 Fop-2.1 从 xml 和 xsl-fo 生成 PDF 文件,并根据 https://xmlgraphics.apache.org/fop/2.1/configuration.html 花了很多时间来配置 fop 配置文件(我使用的是西里尔字体)。

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

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

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

当我尝试使用位于服务模块的资源文件夹中的配置文件获取 FopFactory 实例时,我卡住了,这是一个项目树

service-module

src/main/resources

conf/config.xml

网络模块

如何使用我的配置文件创建 FopFactory 实例?

首先我这样做了:

 FopFactory fopFactory = fopFactory = FopFactory.newInstance(
            new File("/full/path/../resources/conf/config.xml"));

在这个项目中我们使用EJB容器,当然

An enterprise bean must not use the java.io package to attempt to access files and directories in the file system.

那我试试这个

    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);

最佳答案

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

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

这里是:

https://github.com/riskop/fop_test

另见:

Set FopFactoryBuilder baseURI to jar classpath

关于java - 如何将 Fop 配置文件加载到 FopFactory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40400638/

相关文章:

java - 客户端的业务逻辑

java - 设计模式: Applying behavior on objects of different family

java - Google Domain API 不断返回 401/403 响应。我究竟做错了什么?

azure - 刷新 Azure VM 规模集中的凭据/配置

configuration - 如何避免意外 'hg push' 而不是 'hg qpush' ?

jpa - JPA2.0 : Delete Entity in OneToMany RelationShip

java - JSP如何获取JSP中文件的完全限定名称

java - 有没有办法仅通过 key 对获取对和值映射的值?

grails - 是否可以从Grails中的外部化配置文件加载更多配置文件?

带有 EJB 配置的 Java JNDI