将 pdf 文件中的页面复制到新文档

Сер*_*гей 5 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 titlepage = template.GetPage(1);
          using (var pdf = new PdfDocument(writer))
            {
                pdf.AddPage(titlepage); // exception
Run Code Online (Sandbox Code Playgroud)

.AddPage()它会抛出这个异常:

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

我怎样才能解决这个问题 ?

mkl*_*mkl 9

一个 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); 
}
Run Code Online (Sandbox Code Playgroud)

(请注意,如果页面上有额外内容,您可能需要选择该方法的重载,该方法接受附加IPdfPageExtraCopier实例,例如对于 AcroForm 字段 a PdfPageFormCopier。)