代码之家  ›  专栏  ›  技术社区  ›  Nick

在apachefop中,如何以编程方式设置字体库,并且仍然加载<directory>中的字体?

  •  2
  • Nick  · 技术社区  · 14 年前

    我正在使用ApacheFop1.0。代码在不同的服务器上运行,所以我将字体放在每个服务器的实例根目录中。我的计划是以编程方式设置字体库(到服务器实例根目录,加上“/fonts/”),并在我的fop配置文件中设置相对于此字体库的字体路径。下面是创建FopfFactory的代码片段:

        private static final String FONT_BASE = System.getProperty("com.sun.aas.instanceRoot") + "/fonts/";
    
    public FOPWrapperBean() throws Exception {
        ClassLoader loader = this.getClass().getClassLoader();
        InputStream fopStream = loader.getResourceAsStream("META-INF/fop.xconf");
        logger.log(Level.FINE, "InputStream: {0}", fopStream.toString());
        DefaultConfigurationBuilder cfgBuilder = new DefaultConfigurationBuilder();
        Configuration cfg = cfgBuilder.build(fopStream);
        this.fopFactory = FopFactory.newInstance();
        this.fopFactory.setUserConfig(cfg);
        fopFactory.getFontManager().setFontBaseURL("file://" + FONT_BASE);
        logger.log(Level.FINE, "Font base url: {0}", fopFactory.getFontManager().getFontBaseURL());
        fopStream.close();
    }
    

    fop.xconf公司几乎完全是违约。它包含

    <base>.</base>
    

    <fonts>
        <directory>DejaVuTtf</directory>
    </fonts>
    

    (在{instance root}/fonts/DejaVuTtf中有几种字体,如果我只给出一个绝对路径,就可以正确地加载这些字体——但这不适用于多个服务器,每个服务器可能有不同的实例根目录)。

    如何以编程方式确定的路径加载字体?

    谢谢!

    3 回复  |  直到 14 年前
        1
  •  1
  •   CrookedBow    13 年前

    您的java代码应该可以很好地工作,因为字体库是在运行时确定的,取决于服务器-我们正在做一些非常类似的事情,它可以很好地工作。也许你的系统属性没有给你你认为是的目录?

        2
  •  1
  •   Frank Schwarz    12 年前

    我决定使用“预处理器”在加载 fopStream DefaultConfigurationBuilder

    <fonts>
        <directory>${com.sun.aas.instanceRoot}/fonts/DejaVuTtf</directory>
    </fonts>
    
        3
  •  0
  •   Nick    12 年前