PdfDocument.GetPageSize () не установлен для экземпляра объекта iText7 - PullRequest
0 голосов
/ 04 ноября 2019

Я пытаюсь следовать некоторой документации iText7, чтобы вставить заголовок в мой pdf-документ, однако GetPageSize () возвращает «Ссылка на объект не установлена ​​для экземпляра объекта.».

Я пыталсядобавление страниц через объект PdfDocument и объект Document и установка размера страницы. Я вижу 4 страницы в цикле, но ничего, что я изменю, не даст мне размер страницы.

public static void createPdf(string dest)
        {
            MemoryStream stream = new MemoryStream();
            PdfWriter writer = new PdfWriter(stream);
            PdfDocument pdfDoc = new PdfDocument(writer);
            pdfDoc.AddNewPage(PageSize.A4);
            pdfDoc.AddNewPage(PageSize.A4);
            pdfDoc.AddNewPage(PageSize.A4);
            pdfDoc.AddNewPage(PageSize.A4);
            var doc = new Document(pdfDoc);

            doc.Add(new Paragraph("This is page 1."));
            doc.Add(new AreaBreak(AreaBreakType.NEXT_PAGE));
            doc.Add(new Paragraph("This is page 2."));
            doc.Add(new AreaBreak(AreaBreakType.NEXT_PAGE));
            doc.Add(new Paragraph("This is page 3."));
            doc.Add(new AreaBreak(AreaBreakType.NEXT_PAGE));
            doc.Add(new Paragraph("This is page 4."));

            Paragraph header = (new Paragraph("Copy").SetFont(PdfFontFactory.CreateFont(StandardFonts.HELVETICA)).SetFontSize(14));

            for (int i = 1; (i <= pdfDoc.GetNumberOfPages()); i++)
            {
                PdfPage page = pdfDoc.GetPage(i);
                Rectangle pageSize = page.GetPageSize();
                float x = (pdfDoc.GetPage(i).GetPageSize().GetWidth() / 2);
                float y = (pdfDoc.GetPage(i).GetPageSize().GetTop() - 20);
                doc.ShowTextAligned(header, x, y, i, TextAlignment.CENTER, VerticalAlignment.BOTTOM, 0);
            }

            doc.Close();
        }

Сообщение об ошибке System.NullReferenceException: «Ссылка на объект не установлена ​​на экземпляр объекта». встречается в строке Rectangle pageSize = page.GetPageSize ();

1 Ответ

1 голос
/ 06 ноября 2019

Как только вы используете Document экземпляр, он будет сбрасывать содержимое, записанное в PDF по умолчанию, и, таким образом, поскольку вы добавили 4 страницы содержимого, первая уже сбрасывается, когда вы приступаете к выполнению цикла, получая прямоугольникразмеры.

Чтобы решить эту проблему, вы можете указать Document не сбрасывать его содержимое по умолчанию, передав false третьему параметру в конструкторе (immediateFlush):

var doc = new Document(pdfDoc, PageSize.Default, false);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...