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