EasyTable - Абзац в ячейке - PullRequest
       9

EasyTable - Абзац в ячейке

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

Я использую вашу библиотеку EasyTable, и это просто фантастика c, для моего использования она лучше, чем itext7. У меня только одна проблема. Я пытаюсь вставить абзац с несколькими строками внутри ячейки, но это выдает ошибку. Вот мой класс.

Ошибка:


    Exception in thread "main" java.lang.NullPointerException
        at org.vandeseer.easytable.drawing.cell.ParagraphCellDrawer.drawContent(ParagraphCellDrawer.java:52)
        at org.vandeseer.easytable.TableDrawer.lambda$new$0(TableDrawer.java:53)
        at org.vandeseer.easytable.TableDrawer.drawRow(TableDrawer.java:161)
        at org.vandeseer.easytable.TableDrawer.drawWithFunction(TableDrawer.java:145)
        at org.vandeseer.easytable.TableDrawer.lambda$drawPage$1(TableDrawer.java:75)
        at java.lang.Iterable.forEach(Iterable.java:75)
        at org.vandeseer.easytable.TableDrawer.drawPage(TableDrawer.java:74)
        at org.vandeseer.easytable.TableDrawer.draw(TableDrawer.java:70)
        at it.baz.ProvaPDF.crea(ProvaPDF.java:66)
        at it.baz.ProvaPDF.main(ProvaPDF.java:21)

</p>

<code>package it.baz;

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.vandeseer.easytable.TableDrawer;
import org.vandeseer.easytable.settings.HorizontalAlignment;
import org.vandeseer.easytable.structure.Row;
import org.vandeseer.easytable.structure.Table;
import org.vandeseer.easytable.structure.cell.TextCell;
import org.vandeseer.easytable.structure.cell.paragraph.*;

import java.awt.*;
import java.io.IOException;

public class ProvaPDF {
    public static void main(String[] args) {
        ProvaPDF pdf = new ProvaPDF();
        pdf.crea();
    }

    private void crea() {
        try {
            PDDocument document = new PDDocument();

            final PDPage page = new PDPage(PDRectangle.A4);
            document.addPage(page);

            PDPageContentStream contentStream = new PDPageContentStream(document, page);

            Table myTable = Table.builder()
                    .addColumnsOfWidth(100, 100)
                    .addRow(Row.builder()
                            .add(TextCell.builder().text("One One").borderWidth(1).backgroundColor(Color.GRAY).build())
                            .add(TextCell.builder().text("One Two").borderWidth(1).backgroundColor(Color.LIGHT_GRAY).build())
                            .build())
                    .addRow(Row.builder()
                            .add(TextCell.builder().text("Two One").borderWidth(1).textColor(Color.RED).build())
                            .add(TextCell.builder().text("Two Two").borderWidth(1).horizontalAlignment(HorizontalAlignment.RIGHT).build())
                            .build())
                    .addRow(Row.builder()
                            .add(TextCell.builder().text("Two Two").borderWidth(1).horizontalAlignment(HorizontalAlignment.RIGHT).build())

                            .add(ParagraphCell.builder()
                                    .paragraph(ParagraphCell.Paragraph.builder()
                                            .append(StyledText.builder().text("This is some text in one font.").build())
                                            .appendNewLine()
                                            .build())
                                    .build())
                            .build())
                    .build();

            TableDrawer tableDrawer = TableDrawer.builder()
                    .contentStream(contentStream)
                    .startX((page.getMediaBox().getUpperRightX() - 200) / 2)
                    .startY(page.getMediaBox().getUpperRightY() - 20)
                    .table(myTable)
                    .build();

            System.out.println(page.getMediaBox().getUpperRightY());
            System.out.println(page.getMediaBox().getUpperRightX());

            tableDrawer.draw();

            contentStream.close();

            document.save("example.pdf");
        } catch (IOException e) {
            System.out.println(e.getMessage());
        }
    }
}
</code>

Спасибо.

1 Ответ

0 голосов
/ 20 февраля 2020

Вандаер предложил это решение:

TableDrawer tableDrawer = TableDrawer.builder()
            .contentStream(contentStream)
            .page(page) // <-- This was missing
            .startX((page.getMediaBox().getUpperRightX() - 200) / 2)
            .startY(page.getMediaBox().getUpperRightY() - 20)
            .table(myTable)
            .build();
...