Поиск…


замечания

Имена PdfPTable iText 5 PdfPTable и PdfPCell были выбраны, потому что у нас уже были классы с именем Table и Cell для создания объектов таблицы и ячейки на самом высоком уровне программирования. Был также класс PdfTable который будет использоваться iText внутри. У этих классов было много недостатков, и они устарели в пользу PdfPTable и PdfPCell . Они давно удалены.

На протяжении многих лет PdfPTable и PdfPCell также получали некоторую критику со стороны пользователей. Например: пользователи не понимали разницы между текстовым режимом и композитным режимом.

Текстовый режим используется при создании PdfPCell следующим образом:

cell = new PdfPCell(new Phrase("Cell with rowspan 2"));

В этом случае вы определяете свойства, такие как горизонтальное выравнивание на уровне PdfPCell .

Композитный режим срабатывает в тот момент, когда вы используете метод addElement() :

cell = new PdfPCell();
cell.addElement(new Phrase("Cell 1.2"));

В этом случае некоторые свойства, определенные на уровне PdfPCell (например, горизонтальное выравнивание), игнорируются. Горизонтальное выравнивание должно быть определено на уровне элементов, добавленных в ячейку. Например: если вы хотите создать ячейку, в которой разные абзацы должны иметь другое горизонтальное выравнивание, вы переключитесь в композитный режим.

Если вы посмотрите на снимок экрана таблицы, созданной с помощью примера iText 5, вы заметите, что ячейки с содержимым Cell 1.1 (добавленные в текстовом режиме) и Cell 1.2 (добавленные в композитном режиме) выравниваются совсем по-другому.

В ответ на критику нечетного выравнивания мы ввели методы использования информации о зазоре и спуске. Мы используем эти методы для ячеек с содержимым Cell 2.1 (добавлено в текстовом режиме) и Cell 2.2 (добавлено в составном режиме). Мы также представили для этих ячеек прописку 5.

Теперь результат намного лучше.

Что мы зафиксировали в iText 7:

Поскольку мы создали iText 7 с нуля, у нас не было классов наследия с именами, которые мы не могли использовать повторно. Мы представили новую Table и новый класс Cell .

Текстового режима больше нет и нет композитного режима. Cell создается либо без параметров, либо с параметрами, которые определяют rowspan и colspan. Все содержимое добавляется одинаково: с помощью метода add() .

Наши клиенты также просили предоставить средства для определения разницы и отступов. В примере iText 7 мы добавили серый фон, чтобы показать разницу. В ячейке с содержимым Cell 2.1 мы определяем разницу в 5 пользовательских единиц. Отступ по умолчанию - 2. В ячейке с содержимым Cell 2.2 мы определяем заполнение из 5 пользовательских единиц, по умолчанию - 0.

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

Хотите узнать больше о таблицах и ячейках в iText 7?

Чтение Добавление объектов AbstractElement (часть 2), которое является главой 5 в учебнике iText 7: Building Blocks . Получите бесплатную электронную книгу!

HelloWorldTable.java (iText 5)

В этом примере мы создадим следующую таблицу, используя iText 5:

введите описание изображения здесь

Для этого нужен PdfPTable и PdfPCell :

public void createPdf(String dest) throws IOException, DocumentException {
    Document document = new Document();
    PdfWriter.getInstance(document, new FileOutputStream(dest));
    document.open();
    PdfPTable table = new PdfPTable(3);
    PdfPCell cell = new PdfPCell(new Phrase("Cell with colspan 3"));
    cell.setColspan(3);
    cell.setHorizontalAlignment(Element.ALIGN_CENTER);
    table.addCell(cell);
    cell = new PdfPCell(new Phrase("Cell with rowspan 2"));
    cell.setRowspan(2);
    cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
    table.addCell(cell);
    table.addCell("Cell 1.1");
    cell = new PdfPCell();
    cell.addElement(new Phrase("Cell 1.2"));
    table.addCell(cell);
    cell = new PdfPCell(new Phrase("Cell 2.1"));
    cell.setPadding(5);
    cell.setUseAscender(true);
    cell.setUseDescender(true);
    cell.setHorizontalAlignment(Element.ALIGN_CENTER);
    table.addCell(cell);
    cell = new PdfPCell();
    cell.setPadding(5);
    cell.setUseAscender(true);
    cell.setUseDescender(true);
    Paragraph p = new Paragraph("Cell 2.2");
    p.setAlignment(Element.ALIGN_CENTER);
    cell.addElement(p);
    table.addCell(cell);
    document.add(table);
    document.close();
}

Источник: developers.itxtpdf.com

HelloWorldTable.java (iText 7)

В этом примере мы создадим следующую таблицу, используя iText 7:

введите описание изображения здесь

Для этого нам понадобится класс Table и Cell :

public void createPdf(String dest) throws IOException {
    PdfDocument pdf = new PdfDocument(new PdfWriter(dest));
    try (Document document = new Document(pdf)) {
        Table table = new Table(3);
        Cell cell = new Cell(1, 3)
            .setTextAlignment(TextAlignment.CENTER)
            .add("Cell with colspan 3");
        table.addCell(cell);
        cell = new Cell(2, 1)
            .add("Cell with rowspan 2")
            .setVerticalAlignment(VerticalAlignment.MIDDLE);
        table.addCell(cell);
        table.addCell("Cell 1.1");
        table.addCell(new Cell().add("Cell 1.2"));
        table.addCell(new Cell()
            .add("Cell 2.1")
            .setBackgroundColor(Color.LIGHT_GRAY)
            .setMargin(5));
        table.addCell(new Cell()
            .add("Cell 1.2")
            .setBackgroundColor(Color.LIGHT_GRAY)
            .setPadding(5));
        document.add(table);
    }
}

Источник: developers.itxtpdf.com и учебник iText 7: Building Blocks .



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow