PDFBox - encabezado en todas las páginas usando EasyTable

Optimus:

Estoy usando PDFBox y EasyTable https://github.com/vandeseer/easytable para la creación de páginas dinámicas que funciona muy bien. Pero sí quiero cabecera que se añade en todas las páginas. Me enfrentado / intentado por debajo de las cosas.

1) TableBuilder se crea antes de escribir filas para que podamos crear una TableBuilder perfecta desde las filas son dinámicos.

2) intentado insertar encabezado en medio mientras que la creación TableBuilder que de nuevo no es perfecto desde TableDrawer hace que las filas que ser suficiente de acuerdo con la altura de la fila

Cualquier idea / ayuda sería muy apreciada.

Salida de necesidad similar de este proyecto - https://github.com/eduardohl/Paginated-PDFBox-Table-Sample . único problema es que aquí el contenido no es dinámico como EasyTable.

MKL:

EasyTable no soporta repetir encabezados o pies de tabla. Todavía no debería decir porque esta característica es realmente fácil de implementar.

Es difícil, sin embargo, para aplicar en la parte superior de EasyTable porque esa biblioteca (como muchos otros) sufre de ocultación de datos excesiva: muchas variables miembro interesantes y métodos son private, por lo que se amplían las clases no es una opción viable.

Pero lo que puede hacer es manejar las filas de encabezado como una tabla separada que se dibuja una y otra vez! La desventaja es un poco de duplicidad de configuración.

En el caso del código de prueba TwoPagesTableTestque se ha referido, se puede cambiar de esta manera:

final Table.TableBuilder tableHeaderBuilder = Table.builder()
        .addColumnOfWidth(200)
        .addColumnOfWidth(200);

CellText dummyHeaderCell = CellText.builder()
        .text("Header dummy")
        .backgroundColor(Color.BLUE)
        .textColor(Color.WHITE)
        .borderWidth(1F)
        .build();

tableHeaderBuilder.addRow(
        Row.builder()
                .add(dummyHeaderCell)
                .add(dummyHeaderCell)
                .build());

Table tableHeader = tableHeaderBuilder.build();

final Table.TableBuilder tableBuilder = Table.builder()
        .addColumnOfWidth(200)
        .addColumnOfWidth(200);

CellText dummyCell = CellText.builder()
        .text("dummy")
        .borderWidth(1F)
        .build();

for (int i = 0; i < 50; i++) {
    tableBuilder.addRow(
            Row.builder()
                    .add(dummyCell)
                    .add(dummyCell)
                    .build());
}

TableDrawer drawer = TableDrawer.builder()
        .table(tableBuilder.build())
        .startX(50)
        .endY(50F) // note: if not set, table is drawn over the end of the page
        .build();

final PDDocument document = new PDDocument();

float startY = 100F;

do {
    TableDrawer headerDrawer = TableDrawer.builder()
            .table(tableHeader)
            .startX(50)
            .build();

    PDPage page = new PDPage(PDRectangle.A4);
    document.addPage(page);
    try (PDPageContentStream contentStream = new PDPageContentStream(document, page)) {
        headerDrawer.startY(startY);
        headerDrawer.contentStream(contentStream).draw();
        drawer.startY(startY - tableHeader.getHeight());
        drawer.contentStream(contentStream).draw();
    }

    startY = page.getMediaBox().getHeight() - 50;
} while (!drawer.isFinished());

document.save("twoPageTable-repeatingHeader.pdf");
document.close();

( RepeatingTableHeaders prueba createTwoPageTableRepeatingHeader)

Como se puede ver, el código crea primero una por separado Table tableHeadersolamente la fila de encabezado que contiene. Esta tabla a continuación, se añade primero en cada página y una parte de la mesa de filas del cuerpo se añade después de eso.

El resultado: los encabezados de tabla en cada página ...

captura de pantalla

Una palabra de advertencia: Esta es una prueba de concepto, sólo he probado con el código de generación de la tabla de TwoPagesTableTest. Para el código de producción se debe aplicar más pruebas.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=236386&siteId=1
Recomendado
Clasificación