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

如何在无flutter:节点的Dart服务端项目pubspec.yaml中添加字体

在无flutter:节点的纯Dart项目中为pdf包配置自定义字体

对于纯Dart项目(无Flutter环境,pubspec.yaml里没有flutter节点),不需要依赖Flutter的资源管理机制,直接通过文件读取或简单配置就能给pdf包添加自定义字体,以下是两种实用方法:

方法1:直接读取本地字体文件(推荐)

这是最简单的实现方式,通过Dart的文件API直接读取字体文件的字节数据,再传入pdf包使用:

  1. 在项目根目录下新建fonts文件夹,将自定义字体文件(如my_font.ttf或my_font.otf)放入其中。
  2. 编写代码读取字体并生成PDF:
import 'dart:io';
import 'package:pdf/pdf.dart';
import 'package:pdf/widgets.dart' as pw;

void main() async {
  // 读取字体文件字节数据
  final fontBytes = await File('fonts/my_font.ttf').readAsBytes();
  // 转换为pdf包可识别的字体对象
  final customFont = pw.Font.ttf(fontBytes);

  // 创建PDF文档并使用自定义字体
  final pdf = pw.Document();
  pdf.addPage(
    pw.Page(
      build: (context) => pw.Center(
        child: pw.Text(
          '这是使用自定义字体的文本',
          style: pw.TextStyle(font: customFont, fontSize: 32),
        ),
      ),
    ),
  );

  // 将生成的PDF保存到本地
  await File('output.pdf').writeAsBytes(await pdf.save());
}

注意:如果字体文件放在其他路径(比如lib/fonts),需要把文件路径改为lib/fonts/my_font.ttf,确保路径和实际文件位置完全匹配。

方法2:通过pubspec.yaml配置资源(适用于需打包资源的场景)

如果需要将字体作为项目打包资源的一部分,可以在pubspec.yaml的顶层添加资源配置(无需flutter节点):

  1. 在pubspec.yaml中添加资源声明:
name: your_project_name
version: 1.0.0
description: Your project description

# 顶层配置资源路径
assets:
  - fonts/my_font.ttf
  1. 安装resource包(执行dart pub add resource),通过它读取配置的资源:
import 'package:resource/resource.dart';
import 'package:pdf/pdf.dart';
import 'package:pdf/widgets.dart' as pw;

void main() async {
  final res = Resource('package:your_project_name/fonts/my_font.ttf');
  final fontBytes = await res.readAsBytes();
  final customFont = pw.Font.ttf(fontBytes);

  // 后续PDF生成逻辑与方法1一致
  final pdf = pw.Document();
  // ...(省略PDF内容编写代码)
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 05:25:18