iTextSharp: создайте еще одну страницу, копируя последнюю страницу - PullRequest
0 голосов
/ 21 февраля 2020

У меня есть PDF-файл с заголовками, нижними колонтитулами и т.д. c на каждой странице. Мне нужно увеличить количество страниц, если текст очень длинный (у меня переменный текст). Например:

        if (countOfRecords > 120)
        {
            // add one more page like second page of template (which does not have content, only header/footer
        }

Возможно ли это?

1 Ответ

1 голос
/ 21 февраля 2020

Я реализовал это следующим образом: создал файл PDF с «пустой» страницей (имеется в виду только с необходимыми верхними и нижними колонтитулами), а затем добавил его в основной PDF, если необходимо, столько раз, сколько необходимо:

        PdfReader pdfReader = new PdfReader(model.Input);
        Document document = new Document(pdfReader.GetPageSizeWithRotation(1));

        using (MemoryStream ms = new MemoryStream())
        {
            PdfWriter writer = PdfWriter.GetInstance(document, ms);
            document.Open();

            PdfContentByte cb = writer.DirectContent;

            PdfImportedPage page = writer.GetImportedPage(pdfReader, 1);
            cb.AddTemplate(page, 0, 0);

            int countOfPages = (int)Math.Ceiling(Convert.ToDecimal(model.ActiveDriverList.Count - countDriversOnFirstPage) / countDriversOnEmptyPage);


            for (int i = 0; i < countOfPages; i++)
            {
                PdfReader readerPage = new PdfReader(model.EmptyPage);
                readerPage.ConsolidateNamedDestinations();

                document.SetPageSize(pdfReader.GetPageSizeWithRotation(1));
                document.NewPage();

                PdfImportedPage importedPage = writer.GetImportedPage(readerPage, 1);
                cb = AddTextDriversNextPage(cb, model.ActiveDriverList, i + 1);
                cb.AddTemplate(importedPage, 0, 0);
            }

            document.Close();
            writer.Close();
            return ms.ToArray();
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...