You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NestJS导入TTF字体报错:SyntaxError: Invalid or unexpected token

解决NestJS中导入PDF字体的问题

你遇到的错误是因为Node.js尝试将TTF字体文件当作JavaScript模块解析,而TTF是二进制文件,自然会报语法错误。直接用import导入字体文件是错误的做法,正确的处理方式如下:

1. 使用文件路径而非import导入字体

放弃import语句,直接通过文件路径访问字体文件。Node.js的模块系统仅支持解析JS/TS等文本类模块,二进制资源需要用路径引用。

2. 用path模块生成可靠的文件路径

使用Node.js内置的path模块拼接绝对路径,避免相对路径在不同运行环境下出错:

import * as path from 'path';

// 生成dist目录下字体文件的绝对路径
const mulishItalicFontPath = path.join(process.cwd(), 'dist/assets/Mulish-Italic.ttf');

3. 在PDF库中使用字体路径

以常用的PDF生成库pdfkit为例,直接将路径传入字体注册方法:

import PDFDocument from 'pdfkit';
import * as fs from 'fs';
import * as path from 'path';

export async function generatePdf() {
  const doc = new PDFDocument();
  const fontPath = path.join(process.cwd(), 'dist/assets/Mulish-Italic.ttf');
  
  // 注册字体
  doc.registerFont('Mulish Italic', fontPath);
  
  // 使用字体
  doc.font('Mulish Italic').fontSize(16).text('这是使用自定义斜体字体的文本');
  
  // 输出PDF文件
  doc.pipe(fs.createWriteStream('output.pdf'));
  doc.end();
}

4. 确保NestJS正确复制静态资源到dist

检查nest-cli.json中的配置,确保构建时assets目录会被复制到dist:

{
  "$schema": "https://json.schemastore.org/nest-cli",
  "collection": "@nestjs/schematics",
  "sourceRoot": "src",
  "compilerOptions": {
    "deleteOutDir": true,
    "assets": ["assets/**/*"], // 配置复制assets下所有文件
    "watchAssets": true // 开发模式下自动同步assets修改
  }
}

内容的提问来源于stack exchange,提问作者hellogoodnight

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 23:30:50