即时通讯在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个。

java - iText列宽错误-LMLPHP

最佳答案

摘要

如果仅使用它来生成PDF表,而不需要RTF和HTML输出,则最好使用PdfPTable类[现在不支持表],该类得到更好的支持并且不太容易出现古怪(如此处所述:)。

浆纱

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

页眉和页脚

由于您使用的是页眉和页脚,因此PdfPTable具有setHeaderRows(int)setFooterRows(int),但是请注意:


  从页眉行中减去页脚行数。例如,对于具有两个标题行和一个脚注行的表,代码为:
  
  table.setHeaderRows(3);
  
  table.setFooterRows(1);


PdfPCell移植

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

范例与文件

这里是一些使用它的示例(请注意setLockedWidth的用法:PdfpTable vs. Table (vs. SimpleTable?)

PdfPTable的JavaDoc在这里:https://developers.itextpdf.com/examples/tables-itext5/cell-and-table-widths

PdfPCell的JavaDoc在这里:http://itextsupport.com/apidocs/itext5/5.5.9/com/itextpdf/text/pdf/PdfPTable.html

10-06 11:28