Hur man fixar RuntimeException Fontconfig head är null

Felet java.lang.RuntimeException: Fontconfig head is null, check your fonts or fonts configuration uppstår när Aspose.Cells for Java inte kan lokalisera de nödvändiga typsnitten på systemet. Aspose.Cells förlitar sig på fontfiler för rendering och bearbetning, såsom PDF-generering, bildrendering och sidlayoutehantering.

För att lösa detta problem har du några alternativ:

Kör i Headless-läge

Eftersom du sannolikt kör i en headless-miljö bör du konfigurera Java att köra i headless-läge. Headless-läge gör att Java kan köras utan krav på tillgång till en skärm eller grafikkonfiguration, vilket är viktigt när du kör i miljöer som Azure eller Docker.

Du kan aktivera headless-läge genom att lägga till följande systemegenskap i början av din Java-applikation:

java

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

Eller sätt det via kommandoraden när du startar JVM:en:

-Djava.awt.headless=true

Installera nödvändiga typsnitt

Om du arbetar i en miljö där du kan installera paket kan du installera typsnittsrelaterade paket för att säkerställa att grundläggande typsnitt finns tillgängliga. För Linux-system kan du installera typpsntäppar som:

Debian/Ubuntu:

sudo apt-get install -y fontconfig ttf-dejavu

Alpine (för minimal Docker-installation):

apk add --no-cache fontconfig ttf-dejavu

Red Hat/CentOS:

sudo yum install -y fontconfig dejavu-sans-fonts

Exempel

Här är en Dockerfile för Alpine med endast jdk17 installerat.

# 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

Använd Docker med Aspose.Cells for Java, följande undantag kommer att inträffa vid rendering till PDF och bild.

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

Efter att ha lagt till fontconfig och ttf-dejavu paket, fungerar det att rendera till PDF och bild.

# 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