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

Xamarin.Forms用iText生成PDF遇NotImplementedException问题求助

解决Xamarin.Forms iOS中iText 7调用Document.Add抛出System.NotImplementedException的问题

我之前在Xamarin.Forms iOS项目里用iText 7生成PDF时也碰到过一模一样的问题,这个异常本质上是因为iText默认依赖的系统字体加载逻辑在iOS沙箱环境下无法正常工作,尤其是模拟器里的权限限制会导致字体获取操作未实现。结合你用的7.1.13版本,给你几个具体的解决步骤:

1. 确保安装完整的iText 7 NuGet包

别只装核心的itext7包,还需要补充两个关键依赖:

  • itext7.io:处理IO和字体加载的底层模块
  • itext7.bouncy-castle-adapter:解决加密相关的跨平台兼容问题

可以通过NuGet包管理器直接搜索安装这三个包,版本保持和你的7.1.13一致。

2. 嵌入自定义字体到iOS项目

iOS沙箱不允许直接访问系统字体文件,所以我们需要把一个字体文件打包到项目中:

  • 找一个ttf格式的字体文件(比如Arial.ttf),添加到你的Xamarin.Forms iOS项目的Resources文件夹里
  • 选中这个字体文件,在属性面板里设置生成操作为BundleResource,复制到输出目录为如果较新则复制

3. 修改PDF生成代码,指定自定义字体

在创建Paragraph时,明确使用我们嵌入的字体,同时要注意iOS上的正确文件路径:

// 获取iOS沙箱中可写的文档路径
var documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
var filenamepdf = Path.Combine(documentsPath, "output.pdf");

// 从iOS应用包中加载嵌入的字体
var fontBundlePath = NSBundle.MainBundle.PathForResource("Arial", "ttf");
if (string.IsNullOrEmpty(fontBundlePath))
{
    // 处理字体文件找不到的情况
    throw new FileNotFoundException("字体文件未找到,请检查生成操作设置");
}
var customFont = PdfFontFactory.CreateFont(fontBundlePath, PdfEncodings.IDENTITY_H, PdfFontFactory.EmbeddingStrategy.FORCE_EMBEDDED);

// 初始化PDF文档和Document对象
using (var pdf = new PdfDocument(new PdfWriter(filenamepdf)))
using (var document = new Document(pdf, PageSize.A4))
{
    string line = "Hello! Welcome to iTextPdf";
    document.Add(new Paragraph(line).SetFont(customFont));
}

额外注意事项

  • 如果你用的是真机测试,确保在Info.plist中添加了文件访问权限(模拟器通常不需要,但真机可能需要)
  • 7.1.13版本确实存在一些移动平台的小兼容问题,如果上述步骤还是不行,可以尝试升级到iText 7的最新稳定版(比如7.2.x),新版本对Xamarin的支持更好

内容的提问来源于stack exchange,提问作者user3704628

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:58:42