iText列宽错误

时间:2018-01-24 18:10:03

标签: java android itext

我在android中使用iText来构建带有表格的pdf文件。这似乎很容易,但结果是错误的。帮助赞赏!

    PdfDocument pdfDoc = new PdfDocument(new PdfWriter(output));
    Document documento = new Document(pdfDoc);

    float[] columnWidths = new float[]{40, 160, 50, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25};
    Table table = new Table(columnWidths);
    table.setWidth(500);


    com.itextpdf.layout.element.Cell cell = new com.itextpdf.layout.element.Cell(1, columnWidths.length).add("(Continuação)");
    table.addHeaderCell(cell);

    cell = new com.itextpdf.layout.element.Cell(1, columnWidths.length).add("Continua...");
    table.addFooterCell(cell);

    table.setSkipFirstHeader(true);
    table.setSkipLastFooter(true);

    Cell cellA;

    for (int i = 0; i < 100; i++) {

        cellA = new Cell(1, 1).add(String.valueOf(i+1));
        cellA.setTextAlignment(TextAlignment.CENTER);
        cellA.setWidth(40);
        cellA.setFontSize(7);
        table.addCell(cellA);

        cellA = new Cell(1, 1).add("ALYNE BORGES MADEIRA");
        cellA.setTextAlignment(TextAlignment.LEFT);
        cellA.setWidth(160);
        cellA.setFontSize(7);
        table.addCell(cellA);

        cellA = new Cell(1, 1).add("100.00");
        cellA.setTextAlignment(TextAlignment.CENTER);
        cellA.setWidth(50);
        cellA.setFontSize(7);
        table.addCell(cellA);

        for (int j = 0; j < 10; j++) {
            cellA = new Cell(1, 1).add("10.00");
            cellA.setTextAlignment(TextAlignment.CENTER);
            cellA.setWidth(25);
            cellA.setFontSize(7);
            table.addCell(cellA);
        }

    }

问题出在最后一栏,其中宽度不等于之前的9。

enter image description here

1 个答案:

答案 0 :(得分:4)

<强> 摘要

如果您只是使用它来生成PDF表而不需要RTF和HTML输出,那么最好使用PdfPTable类[表现在不受支持],它更好地支持并且不易产生怪癖(如此处所述) :PdfpTable vs. Table (vs. SimpleTable?))。

<强> 浆纱

如果将PdfPTable与setWidths(float[])一起使用,那么您应该能够执行绝对宽度,而无需在每个单元格中指定宽度以获得代码可读性。 (您也可以使用百分比宽度,对于基本表格,可能更容易在页面上正确对齐。)

标题&amp;页脚

因为你正在使用标题和放大器页脚,PdfPTable有setHeaderRows(int)setFooterRows(int),但请注意:

  

从标题行中减去页脚行数。例如,对于具有两个标题行和一个页脚行的表,代码将为:

     

table.setHeaderRows(3);

     

table.setFooterRows(1);

PdfPCell移植

另请注意,PdfPCell已将setTextAlignment更改为setHorizo​​ntalAlignment。

示例和文档

使用它的一些示例(请注意setLockedWidth的用法:https://developers.itextpdf.com/examples/tables-itext5/cell-and-table-widths

JavaDoc for PdfPTable位于:http://itextsupport.com/apidocs/itext5/5.5.9/com/itextpdf/text/pdf/PdfPTable.html

JavaFoc for PdfPCell就在这里:http://itextsupport.com/apidocs/itext5/5.5.9/com/itextpdf/text/pdf/PdfPCell.html