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

Flutter生成PDF时阿拉伯语显示异常问题求助

Flutter生成PDF阿拉伯语乱码解决方案

你当前代码里的utf8编解码完全多余,encoded1.toString()还会把字节数组转成无意义的字符串格式,反而加重显示问题——直接传原始的firstName和lastName即可。

阿拉伯语乱码的核心原因是PDF生成库没有加载支持阿拉伯语的字体,默认字体不包含阿拉伯语字符集,无法正确渲染。以下是具体解决步骤:

1. 引入支持阿拉伯语的字体

下载开源阿拉伯语字体(比如Google的Noto Naskh Arabic),将字体文件(如NotoNaskhArabic-Regular.ttf)放到项目assets/fonts/目录下,然后在pubspec.yaml中配置资源:

flutter:
  assets:
    - assets/fonts/NotoNaskhArabic-Regular.ttf

2. 在PDF生成代码中加载并使用字体

假设你用的是pdf(dart_pdf)库,创建PDF文档时先加载字体:

final font = await rootBundle.load('assets/fonts/NotoNaskhArabic-Regular.ttf');
final ttf = Font.ttf(font);

渲染阿拉伯语文本时,指定该字体并设置从右到左的排版方向:

pw.Text(
  lastName, // 直接传入原始阿拉伯语字符串
  style: pw.TextStyle(
    font: ttf,
    fontSize: 14,
  ),
  textDirection: pw.TextDirection.rtl, // 关键:适配阿拉伯语书写方向
)

3. 修正你的调用代码

移除多余的编解码逻辑,直接传递原始字符串:

onPress: () async {
  final data = await controller.createInvoice(
    items: controller.items,
    firstName: firstName,
    lastName: lastName,
    counterNumber: counterNo,
    subType: subType,
    date: controller.date,
  );
  controller.savePdfFile('invoice_5', data);
}

关键提示

  • 阿拉伯语是从右到左的书写系统,必须设置textDirection: rtl才能保证文字顺序正确。
  • 必须嵌入支持阿拉伯语的字体,默认PDF字体(如Helvetica)不包含阿拉伯语字符,会显示为方块或乱码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 05:10:38