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
相关产品推荐
相关产品推荐

