无限扫描用于在CentOS在Apache的FOP字体(Infinite scan for fonts

2019-09-29 07:26发布

我使用Apache蜡染到SVG转换成PDF的项目之一。 在项目运行的Spring应用中的Tomcat 7一切正常,这在Ubuntu下运行在Tomcat中使用$ CATALINA_HOME /斌/ startup.sh正在启动开发机器上确定。 但是,当我尝试运行在CentOS 6和Tomcat生产服务器上的应用程序中使用开始service tomcat7 start命令的应用分为上convertation无限循环。 我试着调试问题,发现这段代码:

/**
 * Creates the {@link FontInfo} instance for the given configuration.
 * @param cfg the configuration
 * @param useComplexScriptFeatures true if complex script features enabled
 * @return the font collection
 * @throws FOPException if an error occurs while setting up the fonts
 */
public static FontInfo createFontInfo(Configuration cfg, boolean useComplexScriptFeatures)
    throws FOPException {
    FontInfo fontInfo = new FontInfo();
    final boolean strict = false;
    if (cfg != null) {
        URI thisUri = new File(".").getAbsoluteFile().toURI();
        InternalResourceResolver resourceResolver
                = ResourceResolverFactory.createDefaultInternalResourceResolver(thisUri);
        //TODO The following could be optimized by retaining the FontManager somewhere
        FontManager fontManager = new FontManager(resourceResolver, FontDetectorFactory.createDefault(),
                FontCacheManagerFactory.createDefault());

        //TODO Make use of fontBaseURL, font substitution and referencing configuration
        //Requires a change to the expected configuration layout

        DefaultFontConfig.DefaultFontConfigParser parser
                = new DefaultFontConfig.DefaultFontConfigParser();
        DefaultFontConfig fontInfoConfig = parser.parse(cfg, strict);
        DefaultFontConfigurator fontInfoConfigurator
                = new DefaultFontConfigurator(fontManager, null, strict);
        List<EmbedFontInfo> fontInfoList = fontInfoConfigurator.configure(fontInfoConfig);
        fontManager.saveCache();
        FontSetup.setup(fontInfo, fontInfoList, resourceResolver, useComplexScriptFeatures);
    } else {
        FontSetup.setup(fontInfo, useComplexScriptFeatures);
    }
    return fontInfo;
}

PDFDocumentGraphics2DConfigurator类。 当我正在开发机行上的应用程序URI thisUri = new File(".").getAbsoluteFile().toURI(); 与结果thisUri被指派~/tomcat/bin/. 夹。 当应用程序在生产机器上运行它被赋予/. 值。 我认为这是主要的问题,因为价值thisUri是在FOP开始搜索字体和上机生产,这是文件系统,对整个FS结构递归搜索是很慢的根文件夹。 我尝试添加fop.xconf文件到WEB-INF使用字体的配置目录,但它并没有影响FOP的行为。 我不能,因为我开始开发机上生产服务器上启动Tomcat一样。 对如何配置针对的字体扫描的基本目录任何人的想法? 还是我做错了什么?

Answer 1:

我已经找到了问题的解决方法。 我不知道,如果它的赖特还是错做类似的东西,但它的工作原理。 解决方法是基于这样的事实File.getAbsolutFile()默认返回解决了对通过定义的目录的目录user.dir选择。 所以,我需要一些方法来传递Tomcat服务启动该选项。 我发现这样做的唯一方法是添加-Duser.dir=/%CATALINA_HOME/中定义的变量CATALINA_OPTS %CATALINA_HOME/bin/setenv.sh文件。 在此之后,字体扫描过程花了时间正常量和我的应用程序开始正常工作。



文章来源: Infinite scan for fonts in Apache FOP on CentOS