C# 将页面从pdf文件复制到新文档

C# 将页面从pdf文件复制到新文档,c#,pdf,itext,itext7,C#,Pdf,Itext,Itext7,我正在尝试从现有的.pdf文件复制一页,并将其粘贴到新文档中,如下所示: using (var writer = new PdfWriter(OutputFile)) { var reader = new PdfReader("Templates//PDF_Template_Empty.pdf"); PdfDocument template = new PdfDocument(reader); var titl

我正在尝试从现有的.pdf文件复制一页,并将其粘贴到新文档中,如下所示:

     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); // exception
但在.AddPage上,它会引发以下异常:

iText.Kernel.PdfException:“无法打开iText.Kernel.Pdf.PdfPage页。” 已添加到文档iText.Kernel.Pdf.PdfDocument,因为它属于 文档iText.Kernel.Pdf.PdfDocument'


如何修复此问题?

PDF页面对象通常有许多相关对象。如果只将页面本身添加到新文档中,而不添加相关对象,则生成的页面将不完整

因此,iText 7会在AddPage中检查相关页面是否已在目标文档中创建,在后一种情况下会抛出异常以防止丢失依赖对象

要跨文档复制页面,有一种PdfDocument方法CopyPagesTo,它具有许多重载。对你来说

PdfDocument template = new PdfDocument(reader);
using (var pdf = new PdfDocument(writer))
{
    // copy template pages 1..1 to pdf as target page 1 onwards
    template.CopyPagesTo(1, 1, pdf, 1); 
}

注意,如果页面上有额外内容,您可能希望选择该方法的重载,该方法接受额外的IPdfPageExtraCopier实例,例如,对于AcroForm字段,使用PdfPageFormCopier。

您使用的是什么PDFWWriter?例如,您可以提供指向其文档的链接,或者提供其程序集或完整命名空间的名称吗?您的意思是,我可以更改从模板文档复制的新页面中的字段吗?更确切地说:只有使用PdfPageFormCopier复制页面,AcroField字段才会复制到目标文档。在这种情况下,我希望您能够在目标文档中更改它们的值,但我还没有尝试过。