كيفية إصلاح استثناء Runtime رأس Fontconfig فارغ

يحدث خطأ java.lang.RuntimeException: Fontconfig head is null, check your fonts or fonts configuration عندما لا تتمكن Aspose.Cells for Java من تحديد مواضع الخطوط المطلوبة على النظام. تعتمد Aspose.Cells على ملفات الخطوط للأعمال مثل التوليد PDF، ومعالجة الصور، وإدارة تخطيط الصفحات.

لحل هذه المشكلة، لديك بعض الخيارات:

تشغيل في وضع Headless

نظرًا لأنه من المرجح أن تعمل في بيئة بدون واجهة، يجب تكوين Java للعمل في وضع headless. يسمح وضع headless لـ Java بالعمل بدون الحاجة للوصول إلى شاشة أو بيئة رسومية، وهو ضروري عند التشغيل في بيئات مثل Azure أو Docker.

يمكنك تمكين وضع headless عن طريق إضافة خاصية النظام التالية عند بدء تطبيق Java الخاص بك:

java

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

أو تعيينها عبر سطر الأوامر عند تشغيل JVM:

-Djava.awt.headless=true

تثبيت الخطوط الضرورية

إذا كنت تعمل في بيئة يمكنك فيها تثبيت الحزم، يمكنك تثبيت حزم الخطوط الأساسية لضمان توفر الخطوط الأساسية. لنظام Linux، يمكنك تثبيت حزم الخطوط مثل:

ديبيان/أوبونتو:

sudo apt-get install -y fontconfig ttf-dejavu

ألبية (للإعدادات المصغرة لـ Docker):

apk add --no-cache fontconfig ttf-dejavu

ريد هات/سينتوس:

sudo yum install -y fontconfig dejavu-sans-fonts

مثال

إليك ملف Docker الخاص بـ Alpine مع تثبيت jdk17 فقط.

# 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

استخدم Docker مع Aspose.Cells for Java، ستحدث الاستثناءات التالية أثناء التحويل إلى 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

بعد إضافة حزمتَي fontconfig و ttf-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