Номер страницы PdfPCell? - PullRequest
       5

Номер страницы PdfPCell?

0 голосов
/ 10 декабря 2018

Можно ли определить, на какой номер страницы попадает PdfPCell?

Конечно, ячейка таблицы может разбиваться на несколько страниц, поэтому будем рады узнать номер страницы сверху или снизу ячейки.

В конечном итоге я хотел бы знать номер страницы и границы ячеек для второго прохода рендеринга после закрытия документа.Прямоугольные границы легко определить с помощью PdfPCellEvent.Но у меня проблемы с номерами страниц.

iText 5.5.3

1 Ответ

0 голосов
/ 26 марта 2019

Прямоугольные границы легко определить с помощью PdfPCellEvent.Но у меня проблемы с номерами страниц.

A PdfPCellEvent - действительно, путь, и во время вызова метода события ячейки вам просто нужно получить текущий PdfWriter.PageNumber значение, например, вот так:

public class CellEvent : IPdfPCellEvent
{
    public CellEvent(PdfWriter writer, String name)
    {
        this.writer = writer;
        this.name = name;
    }

    public void CellLayout(PdfPCell cell, Rectangle position, PdfContentByte[] canvases)
    {
        Console.WriteLine("Cell {0} on page {1} at {2}, {3} - {4}x{5}", name, writer.PageNumber, position.Bottom, position.Left, position.Width, position.Height);
    }

    PdfWriter writer;
    String name;
}

Используется так:

using (FileStream fileStream = new FileStream(@"Table-CellLayoutInformation.pdf", FileMode.Create))
using (Document document = new Document())
{
    PdfWriter writer = PdfWriter.GetInstance(document, fileStream);
    document.Open();

    PdfPTable table = new PdfPTable(1);
    table.WidthPercentage = 90;
    table.SplitRows = true;
    table.SplitLate = false;
    for (int i = 0; i < 20; i++)
    {
        PdfPCell cell = new PdfPCell();
        cell.CellEvent = new CellEvent(writer, i.ToString());
        cell.AddElement(new Paragraph("Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."));
        cell.AddElement(new Paragraph("Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."));
        table.AddCell(cell);
    }

    document.Add(table);
}

Я получаю вывод

Cell 0 on page 1 at 514, 62.14999 - 470.7x292
Cell 1 on page 1 at 222, 62.14999 - 470.7x292
Cell 2 on page 1 at 36, 62.14999 - 470.7x186
Cell 2 on page 2 at 694, 62.14999 - 470.7x112
Cell 3 on page 2 at 402, 62.14999 - 470.7x292
Cell 4 on page 2 at 110, 62.14999 - 470.7x292
Cell 5 on page 2 at 36, 62.14999 - 470.7x74
Cell 5 on page 3 at 568, 62.14999 - 470.7x238
Cell 6 on page 3 at 276, 62.14999 - 470.7x292
Cell 7 on page 3 at 36, 62.14999 - 470.7x240
Cell 7 on page 4 at 748, 62.14999 - 470.7x58
Cell 8 on page 4 at 456, 62.14999 - 470.7x292
Cell 9 on page 4 at 164, 62.14999 - 470.7x292
Cell 10 on page 4 at 36, 62.14999 - 470.7x128
Cell 10 on page 5 at 622, 62.14999 - 470.7x184
Cell 11 on page 5 at 330, 62.14999 - 470.7x292
Cell 12 on page 5 at 38, 62.14999 - 470.7x292
Cell 13 on page 6 at 514, 62.14999 - 470.7x292
Cell 14 on page 6 at 222, 62.14999 - 470.7x292
Cell 15 on page 6 at 36, 62.14999 - 470.7x186
Cell 15 on page 7 at 694, 62.14999 - 470.7x112
Cell 16 on page 7 at 402, 62.14999 - 470.7x292
Cell 17 on page 7 at 110, 62.14999 - 470.7x292
Cell 18 on page 7 at 36, 62.14999 - 470.7x74
Cell 18 on page 8 at 568, 62.14999 - 470.7x238
Cell 19 on page 8 at 276, 62.14999 - 470.7x292

Код прослушивателя событий вышеочевидно предполагает, что вы действительно рисуете таблицу, добавляя ее к соответствующему Document.Если вы нарисуете таблицу с помощью PdfPTable.WriteSelectedRows на произвольном PdfContentByte, данные, скорее всего, будут неправильными.

Код, протестированный с помощью iText 5.5.14-SNAPSHOT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...