当前位置: 首页 > 知识库问答 >
问题:

CentOS上Apache FOP中字体的无限扫描

易修洁
2023-03-14

我在其中一个项目中使用Apache Batik将SVG转换为PDF。该项目是在Tomcat7中运行的Spring应用程序。在Ubuntu下运行的开发机器上一切正常,Tomcat使用$CATALINA_HOME/bin/startup启动。但是当我尝试在CentOS 6的生产服务器上运行应用程序,Tomcat使用服务tomcat7 start命令启动时,应用程序在转换时陷入无限循环。我试着调试这个问题,发现了以下代码:

/**
 * 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("."). getAbsolteFile(). toURI();结果为thisUri分配了~/tomcat/bin/.文件夹。当应用程序在生产机器上运行时,它被分配了/.值。我认为这是主要的问题,因为thisUri的值是FOP开始字体搜索的文件夹,在生产机器上这是文件系统的根,在整个FS结构上的递归搜索非常慢。我试图用字体配置将fop.xconf文件添加到WEB-INF目录,但它不影响FOP的行为。我不能像在开发机器上一样在正式服上启动Tomcat。有人知道如何配置FOR字体扫描的基本目录吗?或者我做错了什么?

暂时还没有答案

 类似资料:
  • 正如使用boto3完全扫描dynamoDb中所解释的,我构建了一个解决方案,使用某些条件完全扫描dynamoDb表。这是我的代码: 但是当代码被执行时,它会进入一个无限循环。这是LastEvaluatedKey每次迭代的输出: 它一直在这两对之间循环。 编辑: 我添加了do_scan方法。

  • 我有以下fop.conf,在Windows下工作正常: 但是因为应用程序还需要在没有提供Arial的操作系统上运行,所以我决定在Java应用程序的< code > src/main/resources/fonts/Arial . TTF 中添加一个字体。 所以我试着这样引用字体: 但它不使用字体。 调试时,我看到fopFactoryBuilder有一个名为< code>baseUri的字段,是否可

  • 问题内容: 我正在用Java写一个简单的程序,它需要从文本文件中读取数据。但是,我在计算行数时遇到了麻烦。对于一个简单的Google搜索来说,这个问题似乎已经足够普遍了,但是我什至没有在搜索正确的东西。 我正在学习的教科书建议要计算文本文件中的行数,您应该执行以下操作: 在我看来,这是问题所在。我认为无限运行。我在代码中使用的数据文件肯定具有有限数量的数据行。 我该怎么办? 问题答案: 第一次调用

  • 问题内容: 我已经将laravel存储库克隆到了CentOS 7盒中。当我尝试运行它时,出现500错误,但未显示任何内容。 因此,我进行了检查,发现有一些权限错误: 我做了以下尝试来克服这些问题: 所以现在显示如下: 但这没有用。 有趣的是,我之前输入了一些错误的命令,这些命令似乎将日志添加到日志文件中。 问题答案: 我找到了答案,解决了我的问题。 通过关闭命令来证明这是问题所在 这应该允许写入,

  • 我正在尝试编写使用Scanner类从用户那里获取输入的代码。但是hasNext()、hasNextInt()和hasNextLine()每次都会运行无限循环。

  • 我制作了一个简单的程序,根据公式中的3个数字计算增量。但是,小数点后的分数和数字(如3.33、3/4)有问题。如果我将其替换为任何字母,则会出现错误: 线程“main”java中出现异常。util。java上的InputMismatchException。base/java。util。扫描仪。throwFor(Scanner.java:939)访问java。base/java。util。扫描仪。下