Apache Batikを使用して、プロジェクトの1つでSVGをPDFに変換します。このプロジェクトはTomcat 7で動作するSpringアプリケーションです。すべては、$ CATALINA_HOME/bin/startup.shを使用してTomcatを起動してUbuntuで動作する開発マシンで正常に動作します。しかし、CentOS 6のプロダクションサーバーでアプリケーションを実行しようとすると、service tomcat7 start
コマンドを使用してTomcatが起動すると、アプリケーションは変換時に無限ループに陥ります。問題をデバッグしようとしましたが、このコードが見つかりました:CentOSのApache FOPのフォントの無限スキャン
/**
* 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
クラスです。私が開発者マシン上でアプリケーションを実行しているときにという結果がというフォルダに割り当てられたthisUri
という結果になります。アプリが本番マシンで実行されているときは、/.
という値が割り当てられています。 thisUri
の値は、FOPがフォント検索を開始するフォルダであり、これはファイルシステムのルートであり、FS構造全体の再帰検索が非常に遅いため、本番マシンでは主な問題だと私は考えています。フォント設定でfop.xconf
ファイルをWEB-INF
ディレクトリに追加しようとしましたが、FOPの動作には影響しませんでした。そして、私は開発マシンから始めるのと同じ方法で、プロダクションサーバー上でTomcatを起動できません。 FORのフォントスキャンのベースディレクトリを設定する方法に関するアイデアはありますか?または私は何か間違っているのですか?