Flutter使用Pdf包时报错Helvetica has no Unicode support如何解决
Helvetica has no Unicode support
该报错的根本原因是dart_pdf包默认自带的Helvetica字体仅支持ASCII字符,不支持Unicode编码(包括中文、日文、特殊符号等),只要文本内容包含非ASCII字符就会触发报错,直接运行官方示例也可能出现该问题。以下是完整的解决流程:
解决步骤
1. 准备字体文件
提前准备一套支持Unicode的TTF/OTF格式字体(比如思源黑体、阿里巴巴普惠体等,注意规避商用版权风险)。
2. 配置Flutter资源
在项目根目录新建assets/fonts文件夹,把准备好的字体文件放到该目录下。
打开项目根目录的pubspec.yaml文件,添加字体资源声明:
flutter: assets: # *路径要和实际字体文件的存放路径完全一致,大小写敏感* - assets/fonts/AlibabaPuHuiTi-Regular.ttf # 如有粗体、斜体等其他字重需求,可对应添加多个字体文件
配置完成后执行flutter pub get命令刷新资源配置。
3. 代码中显式指定自定义字体
生成PDF时不要使用包默认的文本样式,先加载本地字体文件,再将字体显式指定给所有用到的文本组件:
import 'package:flutter/services.dart'; import 'package:pdf/pdf.dart'; import 'package:pdf/widgets.dart' as pw; // 生成PDF的逻辑 Future<void> generatePdf() async { // 加载自定义字体 final fontBytes = await rootBundle.load("assets/fonts/AlibabaPuHuiTi-Regular.ttf"); final customFont = pw.Font.ttf(fontBytes); final pdf = pw.Document(); pdf.addPage( pw.Page( build: (pw.Context context) { return pw.Center( // *所有Text组件都要在style中显式指定font参数* child: pw.Text( "测试Unicode文本内容", style: pw.TextStyle( font: customFont, fontSize: 24, ), ), ); }, ), ); }
常见问题排查
- 配置完字体还是报错,优先检查
pubspec.yaml中的资源路径是否和实际文件路径完全匹配,路径大小写敏感 - 不同字重的文本需要对应加载不同字重的字体文件,分别指定给对应TextStyle即可
- 不要依赖包默认的主题字体,所有文本组件必须显式指定自定义字体
内容的提问来源于stack exchange,提问作者sudhanshu shaurya
相关产品推荐
相关产品推荐

