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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 11:03:18