使用pdf包在Flutter生成PDF时添加图标报错如何解决?
报错原因
pdf包默认没有内置任何图标字体库,你直接传入IconData的编码值时,包找不到对应字体来渲染该Unicode字符,就会触发字符无效的异常。
解决步骤
- 第一步:准备你要使用的图标对应的字体文件(比如Material Icons的ttf格式字体包),放到项目的
assets目录下,同时在pubspec.yaml中完成资源注册声明。 - 第二步:在初始化PDF文档的逻辑中,先加载字体文件为
pdf包可识别的字体对象:
import 'package:flutter/services.dart'; import 'package:pdf/widgets.dart' as pw; // 加载图标字体 final fontBytes = await rootBundle.load("assets/MaterialIcons.ttf"); final iconFont = pw.Font.ttf(fontBytes);
- 第三步:调用
pw.Icon时,指定加载好的字体,同时匹配IconData的字体家族配置:
pw.Icon( pw.IconData( 0xe047, fontFamily: 'MaterialIcons', ), font: iconFont, size: 20, // 可根据需求调整图标大小 )
注意事项
- 图标编码值必须和你加载的字体文件匹配,混用不同字体的编码会继续出现渲染异常或报错。
- 如果使用自定义图标库,只需要替换上面的字体文件为你自己的ttf/otf格式字体即可,逻辑完全一致。
内容的提问来源于stack exchange,提问作者Phanindra
相关产品推荐
相关产品推荐

