Angular中使用jsPDF生成PDF时孟加拉语字体无法显示如何解决
Angular项目jsPDF孟加拉语字体无法显示解决方案
jsPDF默认内置的字体仅支持拉丁字符集,不包含孟加拉语等非拉丁文字的字符映射,因此默认状态下仅英文字符可正常渲染,可通过导入自定义孟加拉语字体解决该问题,具体操作步骤如下:
- 步骤1:准备支持孟加拉语的TTF格式字体文件,可选用Kalpurush、思源黑体孟加拉语版等支持完整孟加拉语字符集的字体。
- 步骤2:将TTF字体文件转换为Base64格式,可通过本地Node.js脚本完成转换,参考代码:
const fs = require('fs'); // 替换为你的本地字体文件路径 const fontFile = fs.readFileSync('./kalpurush.ttf'); const fontBase64 = fontFile.toString('base64'); // 输出的字符串即可用于jsPDF注册 console.log(fontBase64);
- 步骤3:在Angular业务代码中注册并使用自定义字体,参考代码:
import jsPDF from 'jspdf'; // 生成PDF逻辑 const generatePdf = () => { const doc = new jsPDF(); // 注册字体:参数依次为字体Base64、自定义字体名、字重、编码 doc.addFont('你生成的字体Base64字符串', 'BanglaFont', 'normal', 'Identity-H'); // 切换为自定义孟加拉语字体 doc.setFont('BanglaFont'); doc.setFontSize(14); // 写入孟加拉语文本 doc.text('বাংলা টেক্সট পরীক্ষা', 10, 20); // 导出PDF doc.save('bangla-output.pdf'); }
注意事项
- 必须将
addFont的第四个参数指定为Identity-H,该编码支持Unicode字符集,是渲染非拉丁文字的必要配置 - 若需要使用粗体、斜体等不同字重,需分别导入对应字重的TTF文件完成注册
- 可对TTF字体做子集化处理,仅保留项目需要用到的字符,避免打包后体积过大
内容的提问来源于stack exchange,提问作者abhi12335
相关产品推荐
相关产品推荐

