RuntimeException Fontconfig head is nullを修正する方法

java.lang.RuntimeException: Fontconfig head is null, check your fonts or fonts configurationというエラーは、Aspose.Cells for Javaが必要なフォントをシステム上で見つけられないときに発生します。Aspose.Cellsは、PDF生成や画像レンダリング、ページレイアウトなどの操作にフォントファイルに依存しています。

この問題を解決するには、いくつかの方法があります:

ヘッドレスモードで実行

おそらくヘッドレス環境で実行しているため、Javaをヘッドレスモードで動作させる設定が必要です。ヘッドレスモードは、ディスプレイやグラフィックス環境にアクセスせずにJavaを動かすことができ、AzureやDockerのような環境での実行に不可欠です。

Javaアプリケーションの開始時に、次のシステムプロパティを追加してヘッドレスモードを有効にできます:

java

System.setProperty("java.awt.headless", "true");

JVMを起動するときにコマンドラインを通じて設定します:

-Djava.awt.headless=true

必要なフォントをインストールする

パッケージをインストールできる環境で作業している場合は、基本的なフォントを利用可能にするためにフォント関連のパッケージをインストールできます。Linuxシステムの場合、次のようなフォントパッケージをインストールできます:

Debian/Ubuntu

sudo apt-get install -y fontconfig ttf-dejavu

Alpine(最小限のDockerセットアップ用):

apk add --no-cache fontconfig ttf-dejavu

Red Hat/CentOS

sudo yum install -y fontconfig dejavu-sans-fonts

ここには、JDK17のみがインストールされたAlpineのDockerfileの例があります。

# Start with the bare Alpine base image
FROM alpine:latest

# Set environment variables for Java
ENV JAVA_HOME=/usr/lib/jvm/java-17-openjdk \
    PATH=$JAVA_HOME/bin:$PATH

# Install only the minimal OpenJDK 17 package
RUN apk add --no-cache openjdk17-jdk \
    && java -version

Aspose.Cells for Javaのdockerを使用し、以下の例外がPDFや画像のレンダリング中に発生します。

Caused by: java.lang.RuntimeException: Fontconfig head is null, check your fonts or fonts configuration
    at java.desktop/sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1271)
    at java.desktop/sun.awt.FontConfiguration.readFontConfigFile(FontConfiguration.java:224)
    at java.desktop/sun.awt.FontConfiguration.init(FontConfiguration.java:106)
    at java.desktop/sun.awt.X11FontManager.createFontConfiguration(X11FontManager.java:706)
    at java.desktop/sun.font.SunFontManager$2.run(SunFontManager.java:358)
    at java.desktop/sun.font.SunFontManager$2.run(SunFontManager.java:315)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:318)
    at java.desktop/sun.font.SunFontManager.<init>(SunFontManager.java:315)
    at java.desktop/sun.awt.FcFontManager.<init>(FcFontManager.java:35)
    at java.desktop/sun.awt.X11FontManager.<init>(X11FontManager.java:56)
    ... 33 more

fontconfigttf-dejavuパッケージを追加した後、PDFや画像のレンダリング中には問題なく動作します。

# Start with the bare Alpine base image
FROM alpine:latest

# Set environment variables for Java
ENV JAVA_HOME=/usr/lib/jvm/java-17-openjdk \
    PATH=$JAVA_HOME/bin:$PATH

# Install only the minimal OpenJDK 17 package
RUN apk add --no-cache openjdk17-jdk \
    && java -version

# Install fontconfig and ttf-dejavu packages to fix RuntimeException: Fontconfig head is null
RUN apk add --no-cache fontconfig ttf-dejavu \
    && fc-cache -f -v