Broken Font auf AWS Lambda
Das Rendern eines PDF-Dokuments in Linux könnte zu kaputten Zeichen führen, wie im Bild unten gezeigt. Manchmal scheinen die Zeichen in einer Windows-Umgebung richtig zu rendern, aber nicht auf Linux.

Grund
Der Grund ist, dass die Schriftart im Betriebssystem fehlt.
Lösungen
Wenn Sie den Schriftartnamen bereits kennen, ist das großartig - Sie können Schritt 1 überspringen.
- Um den Schriftartnamen zu finden, versuchen Sie das HTML auf Windows zu rendern und verwenden Sie Adobe, um die Zeichen zu inspizieren.
- Sobald der Schriftartname identifiziert ist, können Sie die Schriftartdatei online herunterladen, zum Beispiel von Google Fonts.
- Um die Schriftart über die Dockerfile hinzuzufügen und zu installieren, legen Sie die Schriftart im Projekt ab und stellen Sie 'Kopieren in das Ausgabeverzeichnis' auf 'Immer kopieren.' ein. Verwenden Sie dann den folgenden Code, um sie in die Dockerfile hinzuzufügen und zu installieren:
# Copy the Cambria Math font into the container
# Ensure the font file (cambria.ttc) exists in your project directory
COPY cambria.ttc /usr/share/fonts/
# Install fontconfig to update the font cache
# This will install fontconfig and refresh the font cache to recognize the newly added fonts
RUN dnf install -y fontconfig && \
fc-cache -fv
Erklärung
-
COPY cambria.ttc /usr/share/fonts/: Diese Zeile kopiert die Cambria Math-Schriftart aus Ihrem Projektverzeichnis in das Schriftartenverzeichnis des Containers. Stellen Sie sicher, dass die Schriftartdatei (
cambria.ttc) im Projektverzeichnis vorhanden ist. -
RUN dnf install -y fontconfig && \ : Dieser Befehl installiert das Paket
fontconfig, das für die Verwaltung und Konfiguration des Schriftartenzugriffs unter Linux erforderlich ist. Der Parameter-ybestätigt automatisch die Installation des Pakets. - fc-cache -fv: Dieser Befehl aktualisiert den Schriftarten-Cache, wodurch sichergestellt wird, dass die neu kopierten Schriftarten für Anwendungen im Container verfügbar sind. Die Flags
-f(force) und-v(verbose) werden verwendet, um eine Neugenerierung des Caches zu erzwingen bzw. eine detaillierte Ausgabe bereitzustellen.

