Скопировать страницу из pdf файла в новый документ

Я пытаюсь скопировать одну страницу из существующей .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."

Как я могу это исправить?

1 ответ

Решение

Объект страницы 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.)

Другие вопросы по тегам