Estoy ejecutando el backend de Node en un entorno de AWS Lambda para crear imágenes en un lienzo de FabricJS. Todo funciona bien excepto la familia de fontFamily de los cuadros de texto en el lienzo.
Estoy almacenando mi en una carpeta llamada fonts dentro de la carpeta src .
src |----fonts |----fabric.conf |----Source |----SourceSansPro-Regular.otf |----SourceSansPro-Semibold.otf Creo un archivo fonts.conf como se indica aquí: Incluir fuentes personalizadas en AWS Lambda
<?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> <fontconfig> <dir>/var/task/fonts/</dir> <cachedir>/tmp/fonts-cache/</cachedir> <config></config> </fontconfig>Las variables de entorno están establecidas
FONTCONFIG_PATH="/var/task/fonts" FONTCONFIG_FILE="/var/task/fonts/fonts.conf"Intento registrar las fuentes y crear el lienzo, como se indica aquí: http://fabricjs.com/fabric-intro-part-4#node
const { fabric } = require('fabric') fabric.nodeCanvas.registerFont('fonts/Source/SourceSansPro-Regular.otf', {family: 'Source Sans Pro'}) fabric.nodeCanvas.registerFont('fonts/Source/SourceSansPro-Semibold.otf', {family: 'Source Sans Pro Semibold'}) const canvas = new fabric.Canvas('canvas', {}) canvas.loadFromJSON(canvasJson, async () => { ... canvas.renderAll() const dataURL = canvas.toDataURL({ width: canvas.width, height: canvas.height, left: 0, top: 0, format: 'png' }) console.log(dataURL) }) Aquí hay un extracto de canvasJson
"objects": [ ... { "shadow": null, ... "type": "textbox", ... "fontFamily": "Source Sans Pro Semibold", ... }, ... ] La dataURL resultante contiene la fuente predeterminada y no la fuente deseada, vea la imagen a continuación.