RuntimeException Fontconfig başlığı null nasıl düzeltilir

java.lang.RuntimeException: Fontconfig head is null, check your fonts or fonts configuration hatası, Aspose.Cells for Java sistemde gerekli fontları bulamadığında oluşur. Aspose.Cells, PDF oluşturma, görsel işleme ve sayfa düzeni işlemleri gibi işlemler için font dosyalarına dayanır.

Bu sorunu çözmek için birkaç seçeneğiniz var:

Headless Modda Çalıştırma

Muhtemelen headless bir ortamda çalışıyorsunuz, bu nedenle Java’yı headless modda çalıştıracak şekilde yapılandırmalısınız. Headless mod, Java’nın bir ekran veya grafik ortamına erişimi olmadan çalışmasına izin verir ve Azure veya Docker gibi ortamlar için önemlidir.

Headless modu etkinleştirmek için, Java uygulamanızın başlangıcına aşağıdaki sistem özelliğini ekleyebilirsiniz:

java

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

Veya JVM başlatırken komut satırından ayarlayabilirsiniz:

-Djava.awt.headless=true

Gerekli Yazı tiplerini Kurma

Bir paket yükleyebileceğiniz bir ortamda çalışıyorsanız, temel yazı tiplerinin erişilebilir olmasını sağlamak için font paketleri kurabilirsiniz. Linux sistemleri için şu font paketlerini yükleyebilirsiniz:

Debian/Ubuntu:

sudo apt-get install -y fontconfig ttf-dejavu

Alpine (minimal Docker kurulumu için):

apk add --no-cache fontconfig ttf-dejavu

Red Hat/CentOS:

sudo yum install -y fontconfig dejavu-sans-fonts

Örnek

Burada, sadece jdk17’nin yüklü olduğu bir Alpine Dockerfile örneği yer almaktadır.

# 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 ile Docker kullanın; bu, PDF ve görsellere dönüştürürken aşağıdaki istisnalarla karşılaşacaktır.

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

fontconfig ve ttf-dejavu paketlerini ekledikten sonra, PDF ve görsel oluşturma işlemleri sorunsuz olacaktır.

# 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