我正在使用 Flutter 开发一个 Windows 应用程序,它会生成一个 pdf 文档。该软件使用 Dart/Flutter 库 pdf 3.10.7 来构建文档。我的目标是在 pdf 中使用自定义字体,因此我编写了库文档中所示的代码(网站上的示例代码“使用 TrueType 字体”):
final Uint8List fontData1 =
File('assets/OpenSans-Regular.ttf').readAsBytesSync();
final openSansRegular = pw.Font.ttf(fontData1.buffer.asByteData());
final fontData2 = File('assets/OpenSans-Bold.ttf').readAsBytesSync();
final openSansBold = pw.Font.ttf(fontData2.buffer.asByteData());
这是我的
pubspec.yaml
文件:
assets:
- assets/
我的字体是这样包含的:
我的软件在 Android Studio 的调试模式下运行没有任何错误。
但是,当我使用
flutter build windows
构建发布版本时,我在使用该应用程序时收到此错误:
PathNotFoundException: Cannot open file, path = 'assets/OpenSans-Bold.ttf' (OS Error: The System cannot find the path specified.
, errno = 3)
如果您想访问您的资产,则需要使用
rootBundle
中的 flutter/services.dart
:
import 'package:flutter/services.dart' show rootBundle;
final ByteData fontData1 = await rootBundle.load('assets/OpenSans-Regular.ttf');
虽然您的方法可能在调试模式下有效,但您绝对应该使用
AssetBundle
来加载您的资源。另请注意,这会直接返回一个 ByteData
对象,因此不再需要从 Uint8List
进行转换。
有关如何添加资产的更多信息,请访问docs。