如何在无flutter:节点的Dart服务端项目pubspec.yaml中添加字体
在无flutter:节点的纯Dart项目中为pdf包配置自定义字体
对于纯Dart项目(无Flutter环境,pubspec.yaml里没有flutter节点),不需要依赖Flutter的资源管理机制,直接通过文件读取或简单配置就能给pdf包添加自定义字体,以下是两种实用方法:
方法1:直接读取本地字体文件(推荐)
这是最简单的实现方式,通过Dart的文件API直接读取字体文件的字节数据,再传入pdf包使用:
- 在项目根目录下新建
fonts文件夹,将自定义字体文件(如my_font.ttf或my_font.otf)放入其中。 - 编写代码读取字体并生成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节点):
- 在pubspec.yaml中添加资源声明:
name: your_project_name version: 1.0.0 description: Your project description # 顶层配置资源路径 assets: - fonts/my_font.ttf
- 安装
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
相关产品推荐
相关产品推荐

