Flutter生成多语言PDF问题:马拉地语/印地语文本显示异常
解决多语言PDF中印地语/马拉地语文本断裂问题
天城文(印地语、马拉地语使用的脚本)属于复杂文本脚本,需要支持复杂文本布局(CTL)的字体和渲染逻辑。你当前使用的NotoSans-Regular.ttf对这类脚本的排版支持不足,导致字符显示断裂。
解决方案
1. 替换为专用天城文字体
下载Noto Sans Devanagari Regular字体(Google Noto系列专为天城文优化,完美支持印地语、马拉地语等),将其放入项目的assets/fonts/目录。
2. 配置pubspec.yaml
在项目的pubspec.yaml中声明该字体资源:
flutter: assets: - assets/fonts/NotoSansDevanagari-Regular.ttf
3. 修改代码加载专用字体
更新你的PDF生成代码,替换为支持天城文的字体:
Future<pw.Document> createPDF(List<dynamic> paymentRegister) async { final pdf = pw.Document(); // 加载支持天城文的专用字体 final devanagariFontData = await rootBundle.load('assets/fonts/NotoSansDevanagari-Regular.ttf'); final devanagariFont = pw.Font.ttf(devanagariFontData); pdf.addPage( pw.MultiPage( build: (context) => [ pw.Text( 'पेमेंट रजिस्टर'.tr, style: pw.TextStyle( fontSize: 22, font: devanagariFont, ), // 可选:根据需求设置文本对齐方式 textAlign: pw.TextAlign.center, ), ], ), ); return pdf; }
额外提示
- 若项目需同时支持英文和印度语系文本,可根据文本语言动态切换字体(比如通过本地化判断语言类型)。
- 确保使用的
pdf包为最新稳定版,新版本对复杂文本渲染的支持更完善。
内容的提问来源于stack exchange,提问作者Mohsin Patel
相关产品推荐
相关产品推荐

