You need to enable JavaScript to run this app. Flutter使用Pdf包时报错Helvetica has no Unicode support如何解决
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 13:45:03