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

从PDF复制页面到新文档时调用AddPage()抛出iText异常的问题

解决iText复制PDF页面时AddPage抛出异常的问题

你现在碰到的这个问题我之前也踩过坑——直接把源PDF文档里的PdfPage对象加到新文档里肯定会报错,因为每个PdfPage实例都是和它所属的PdfDocument绑定的,不能直接跨文档复用。

先看看你原来的代码:

using (var writer = new PdfWriter(OutputFile)) {
    var reader = new PdfReader("Templates//PDF_Template_Empty.pdf");
    PdfDocument template = new PdfDocument(reader);
    var titlepage = template.GetPage(1);
    using (var pdf = new PdfDocument(writer)) {
        pdf.AddPage(titlepage); // 抛出异常
    }
}

抛出的异常提示也很明确:iText.Kernel.PdfException: 'Page iText.Kernel.Pdf.PdfPage cannot be added to...

方法一:使用CopyTo方法复制单页

只需要修改一行代码,把直接添加原页面改成添加原页面的拷贝版本,用PdfPage的CopyTo()方法,把目标文档传进去,就能得到一个属于目标文档的页面实例:

using (var writer = new PdfWriter(OutputFile)) {
    var reader = new PdfReader("Templates//PDF_Template_Empty.pdf");
    using (PdfDocument template = new PdfDocument(reader))
    using (var pdf = new PdfDocument(writer)) {
        var titlepage = template.GetPage(1);
        // 复制页面到目标文档,再添加
        pdf.AddPage(titlepage.CopyTo(pdf));
    }
}

方法二:使用CopyPagesTo批量拷贝(更适合多页场景)

如果之后需要复制多页,用PdfDocument的CopyPagesTo方法更高效,比如只复制第1页的话可以这么写:

using (var writer = new PdfWriter(OutputFile)) {
    var reader = new PdfReader("Templates//PDF_Template_Empty.pdf");
    using (PdfDocument template = new PdfDocument(reader))
    using (var pdf = new PdfDocument(writer)) {
        // 第一个参数是起始页码,第二个是结束页码,第三个是目标文档
        template.CopyPagesTo(1, 1, pdf);
    }
}

简单说下原因:原代码里的titlepage是属于template这个源文档的,当你调用pdf.AddPage(titlepage)时,iText会检测到这个页面不属于当前的pdf文档,所以直接抛出异常阻止这种非法操作。而CopyTo或者CopyPagesTo会创建一个全新的、属于目标文档的页面副本,这样就不会有绑定冲突了。

内容的提问来源于stack exchange,提问作者Сергей

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:49:32