我正在开发一个Windows应用程序,它可以生成一个pdf文档.该软件使用省道/Flutter 库pdf 3.10.7来构建文档.我的目标是在pdf中使用自定义字体,所以我编写了库文档中所示的代码(网站上的示例代码"To Use a TrueType Font"):

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/

我的字体是这样包含的:

enter image description here

我的软件在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)

推荐答案

如果您想要访问您的assets资源 ,则需要使用flutter/services.dart中的rootBundle:

import 'package:flutter/services.dart' show rootBundle;

final ByteData fontData1 = await rootBundle.load('assets/OpenSans-Regular.ttf');

虽然您的方法可能在调试模式下工作,但您绝对应该使用AssetBundle来加载您的assets资源 .还要注意,这将直接返回ByteData对象,因此不再需要从Uint8List进行转换.

有关如何添加assets资源 的更多信息,请访问docs.

Flutter相关问答推荐

如何使用新的Riverpod语法将依赖传递给AsyncNotifier?

Flutter 中的面向对象模式

如果文档确实存在,则FiRestore将";False";返回到";if-Document-Existes";...还是我说错了?

如何实现Flutter 梳理机图像的小量移动

BoxConstraints强制使用无限宽度(列中的Listview)

如何使用flutter_local_notification包处理通知操作?

在Dart中使用Riverpod代码生成时出现问题(addListener)

如何使用providerContainer监听/写入FutureProvider?

Flutter如何从深入嵌套的小部件中打开抽屉?

如何将取消图标放置在右上角

Flutter - firebase_auth_web 5.4.0 依赖于 intl ^0.17.0 但我必须使用更高版本 (intl ^0.18.0)

Flutter 应用程序在启动画面冻结(java.lang.RuntimeException:无法启动活动 ComponentInfo)

如何在 Flutter 中的 BackdropFilter.blur 中制作一个 100x100 的清晰孔

Flutter/Dart - 从外部类更新状态

当我将主题更改为深色然后返回浅色模式时,Getx 会Flutter 更改主题,它不会加载我的自定义主题

如何扫描来自给定链接或按钮的重定向中的所有 URL?

如何使用列Flutter 中文本占用的空间来控制svg宽度

CircleAvatar 在 ListTile 中领先

type '_InternalLinkedHashMap' 不是使用 http 包的'String' 类型的子类型

如何在 ElevatedButton 上设置背景 colored颜色 动画?