在.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
相关产品推荐
相关产品推荐

