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

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

在Xamarin.Forms中正确使用iText 7生成PDF(解决iOS模拟器NotImplementedException)

你遇到的System.NotImplementedException是因为iText 7的标准NuGet包在iOS平台(尤其是模拟器环境)下存在依赖适配问题——iOS对原生库有特殊要求,而常规的iText包没有包含针对Xamarin.iOS的绑定实现。下面是具体的解决步骤和正确用法:

1. 替换为适配Xamarin的iText依赖包

首先移除你当前安装的普通itext7包,转而安装适配Xamarin平台的相关包:

  • 安装iText7核心包的同时,一定要搭配BouncyCastle.Xamarin包(iText 7依赖BouncyCastle处理加密逻辑,标准BouncyCastle包在iOS上无法正常工作)。
  • 确保所有包的版本尽量匹配(比如都使用7.1.x系列),避免版本兼容问题。

2. 使用iOS沙盒的合法路径

在iOS中,应用只能访问自己沙盒内的路径,直接使用自定义路径会导致读写权限问题,甚至间接引发异常。获取合法路径的方式如下:

var documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
var filenamepdf = Path.Combine(documentsPath, "my_test.pdf");

3. 完整的可运行代码示例

结合上面的调整,完整的PDF生成代码应该是这样的:

using iText.Kernel.Pdf;
using iText.Layout;
using iText.Layout.Element;
using System.IO;

// 生成PDF的方法
public void GeneratePdf()
{
    // 获取iOS应用沙盒的文档目录
    var documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
    var pdfFilePath = Path.Combine(documentsPath, "welcome.pdf");

    // 使用using语句自动释放资源,避免手动Close可能引发的问题
    using (var pdfWriter = new PdfWriter(pdfFilePath))
    using (var pdfDocument = new PdfDocument(pdfWriter))
    using (var document = new Document(pdfDocument))
    {
        string content = "Hello! Welcome to iTextPdf";
        document.Add(new Paragraph(content));
    }
}

4. iOS模拟器的额外配置

  • 在iOS项目的构建选项中,将Linker Behavior设置为Link Framework SDKs Only——如果设置为Link All,链接器可能会误删iText的必要依赖代码,导致异常。
  • 如果模拟器上仍然有问题,可以尝试在真实iOS设备上测试,部分原生库的适配在模拟器上存在局限性。

这样调整后,应该就能解决document.Add()时抛出的未实现异常了。

内容的提问来源于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:53:34