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

在.NET MAUI项目中使用iText7为PDF设置自定义字体失败的求助

在.NET MAUI项目中使用iText7为PDF设置自定义字体失败的求助

嘿,我最近在.NET MAUI里折腾iText7的PDF字体设置时也踩过不少坑,看你遇到的问题,先把我的场景和代码整理出来,有没有做过这个示例的朋友能帮忙看看问题出在哪?

我当前的困扰是:在.NET MAUI项目里基于iText7的PDFCalligraph相关示例添加自定义字体,但一直失败。我已经确认过字体族名是正确的,可就是没法正常生效。

我的代码片段如下:

// Get the application directory
string appDirectory = FileSystem.AppDataDirectory;

// Construct the full path to your font file
string fontFilePath = Path.Combine(appDirectory, "Resources", "Raw", "pdms-saleem-quranfont.ttf");

PdfWriter writer = new PdfWriter(filePath);
PdfDocument pdfDocument = new PdfDocument(writer);
Document document = new Document(pdfDocument);
FontSet set = new FontSet();
set.AddFont(fontFilePath);
//set.AddFont("NotoSansTamil-Regular.ttf");
//set.AddFont("FreeSans.ttf");
document.SetFontProvider(new FontProvider(set));
document.SetProperty(Property.FONT, new String[] { "_PDMS_Saleem_QuranFont" });

另外我也整理了几个自己正在排查的方向,也给同样遇到问题的朋友参考:

  • 先查字体文件的实际路径是否正确:MAUI里FileSystem.AppDataDirectory是应用的私有数据目录,把字体放在Resources/Raw里的话,默认编译后不会自动复制到这个目录哦。得在项目里选中这个字体文件,在属性面板把生成操作设为Embedded resource,或者设为MauiAsset并把Copy to Output Directory改成Copy if newer。如果是嵌入式资源的话,得改成从程序集读取流的方式加载,不能直接用文件路径。
  • 死磕字体族名的完全一致性:有些字体的内部族名和文件名差很多,别只信网上查的结果,直接用字体查看工具(比如Windows自带的字体预览、FontForge)打开你的字体文件,看它的“PostScript名称”或者“字体族”是不是和你写的_PDMS_Saleem_QuranFont完全一样,大小写、下划线这种细节一点都不能错。
  • 简化代码做测试:先把设置字体数组的代码注释掉,直接用PdfFontFactory.CreateFont加载字体文件,然后给段落指定这个字体,看看能不能渲染。这样能先排除是字体加载失败还是全局字体设置的问题,比如:
PdfFont customFont = PdfFontFactory.CreateFont(fontFilePath, PdfEncodings.IDENTITY_H);
document.Add(new Paragraph("测试阿拉伯文本").SetFont(customFont));
  • 检查文件访问权限:MAUI不同平台的文件系统权限不一样,比如Android需要读取文件的权限,iOS对沙盒外的文件访问有限制,得确保你的代码运行时能正常读到字体文件。

备注:内容来源于stack exchange,提问作者Takasur

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 12:35:29