Fuente rota en AWS Lambda: guía de resolución para entornos Linux
Renderizar un documento PDF en Linux podría resultar en caracteres rotos, como se muestra en la imagen a continuación. A veces, los caracteres parecen renderizarse correctamente en un entorno Windows, pero no en Linux.

Razón
La razón es que la fuente falta en el sistema operativo.
Soluciones
Si ya conoces el nombre de la fuente, eso es genial, puedes saltarte el paso 1.
- Para encontrar el nombre de la fuente, intenta renderizar el HTML en Windows y usa Adobe para inspeccionar los caracteres.
- Una vez identificado el nombre de la fuente, puedes descargar el archivo de fuente en línea, como desde Google Fonts.
- Para agregar e instalar la fuente a través del Dockerfile, coloca la fuente en el proyecto y configura 'Copiar en el Directorio de Salida' a 'Copiar Siempre.' Luego, usa el siguiente código para agregarla e instalarla en el Dockerfile:
# 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
Explicación
-
COPY cambria.ttc /usr/share/fonts/: Esta línea copia la fuente Cambria Math desde el directorio de tu proyecto al directorio de fuentes del contenedor. Asegúrate de que el archivo de fuente (
cambria.ttc) esté presente en el directorio del proyecto. -
RUN dnf install -y fontconfig && \: Este comando instala el paquete
fontconfig, que es necesario para gestionar y configurar el acceso a las fuentes en Linux. El indicador-yconfirma automáticamente la instalación del paquete. - fc-cache -fv: Este comando actualiza la caché de fuentes, asegurando que las fuentes recién copiadas estén disponibles para las aplicaciones dentro del contenedor. Las banderas
-f(forzar) y-v(detallado) se utilizan para forzar una re-generación del caché y proporcionar una salida detallada, respectivamente.
Contexto español: fuentes en servicios de firma VeriFactu y TicketBAI alojados en AWS Lambda
Este problema de fuentes rotas tiene especial relevancia para los desarrolladores españoles que despliegan servicios de generación de facturas en AWS Lambda:
Certificados FNMT y renderizado de documentos con firma PAdES
El FNMT (Fábrica Nacional de Moneda y Timbre) emite certificados digitales para ciudadanos y empresas españolas. Los PDFs firmados con certificados FNMT bajo el estándar PAdES (PDF Advanced Electronic Signatures, requerido por eIDAS) a menudo incluyen campos de firma con texto en castellano que deben renderizarse correctamente. Si el contenedor Lambda carece de las fuentes adecuadas, el texto en el campo de firma aparecerá corrupto.
Fuentes para documentos legales en castellano (caracteres con tilde y ñ)
Los documentos fiscales españoles —facturas VeriFactu, registros SII, documentos Facturae— contienen caracteres castellanos como á, é, í, ó, ú, ñ, ü, ¿ y ¡. Para garantizar la correcta renderización en un contenedor Linux (AWS Lambda o Docker), se recomienda instalar Noto Sans con soporte para caracteres latinos extendidos:
# Instalar Noto Sans para soporte completo de caracteres castellanos
RUN dnf install -y google-noto-sans-fonts fontconfig && \
fc-cache -fv
Noto Sans es la fuente de referencia para garantizar la correcta representación de todos los caracteres Unicode utilizados en documentos legales y fiscales españoles, incluyendo los exigidos por la LOPDGDD (documentos con datos personales que deben ser legibles) y la AEPD (Agencia Española de Protección de Datos).
TicketBAI: renderizado de tiques en los tres territorios forales vascos
Los tiques generados bajo TicketBAI para Bizkaia, Gipuzkoa y Araba deben incluir el texto de la leyenda obligatoria en castellano (y opcionalmente en euskera según la hacienda foral). Si el servicio Lambda carece de las fuentes necesarias, la leyenda obligatoria del tique aparecerá corrupta, incumpliendo los requisitos de cada diputación foral.

