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

Flutter中使用PdfGoogleFonts显示中文字符的问题

在Flutter PDF中显示中文字体的解决方案

关于PdfGoogleFonts的中文字体支持

目前PdfGoogleFonts类默认只打包了体积较小的字体子集,官方文档提到的NotoSansTC等中文字体并未包含在内——主要原因是中文字体文件体积过大,无法默认集成到pub包中。

解决办法

方法一:手动引入本地中文字体文件(推荐)

这是最稳定可靠的方案,步骤如下:

  1. 下载所需的中文字体文件(比如Noto Sans SC、思源黑体等),将其放在项目的assets/fonts目录下(若目录不存在则新建)。
  2. 在pubspec.yaml中配置字体资源:
flutter:
  assets:
    - assets/fonts/NotoSansSC-Regular.ttf
  1. 在生成PDF时,通过Font.ttf()加载本地字体并使用:
import 'package:pdf/pdf.dart';
import 'package:pdf/widgets.dart' as pw;
import 'package:flutter/services.dart' show rootBundle;

final pdf = pw.Document();
final font = await pw.Font.ttf(
  rootBundle.load('assets/fonts/NotoSansSC-Regular.ttf'),
);

pdf.addPage(
  pw.Page(
    build: (context) => pw.Center(
      child: pw.Text(
        '这是测试的中文字符',
        style: pw.TextStyle(font: font, fontSize: 20),
      ),
    ),
  ),
);

方法二:通过Google Fonts网络加载中文字体

如果不想引入本地文件,可以尝试使用Font.fromGoogleFonts()方法直接从网络拉取字体,但注意这会依赖网络环境,且首次加载速度较慢:

final font = await pw.Font.fromGoogleFonts(
  'Noto Sans SC',
  fontWeight: pw.FontWeight.normal,
);

需注意,部分中文字体在Google Fonts中的名称需准确匹配:简体中文用Noto Sans SC,繁体中文用Noto Sans TC。

注意事项

  • 确保字体文件路径和pubspec.yaml中的配置一致,避免加载失败。
  • 若使用网络加载,需处理网络异常,防止PDF生成失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 12:54:53