5

我正在使用 Java 和 iText 来生成一些 PDF。我需要将文本放在列中,所以我正在尝试使用 PdfPTable。我创建它:

myTable = new PdfPTable(n);

n是列数。问题是 PdfPTable 是逐行填充表格的,也就是说,你先给第 1 行第 1 列的单元格,然后是第 1 行第 2 列,依此类推,但我需要逐列进行,因为是如何将数据提供给我的。

我会使用http://stderr.org/doc/libitext-java-doc/www/tutorial/ch05.htmlTable中的(让您指定位置),但我得到“无法解析为类型” ,而我的 Eclipse 找不到正确的导入。

编辑:如果我之前的解释令人困惑,我想要按以下顺序填写表格:

1  3  5
2  4  6

而不是这个:

1  2  3
4  5  6
4

2 回答 2

6

这是一种方法:在您的情况 3 中,使用所需的列数创建一个 PdfPTable。对于您的数据的每次迭代,创建一个具有 1 列的 PdfPTable。创建 2 个 PdfPCell 对象,一个包含您当前所在的数据元素,另一个包含数据中的下一个值。所以现在你有一个 1 列和 2 行的 PdfPTable。将此 PdfPTable 添加到具有 3 列的 PdfPTable。继续此操作,直到打印完所有数据。用代码更好地解释:

public class Clazz {

    public static final String RESULT = "result.pdf";
    private String [] data = {"1", "2", "3", "4", "5", "6"};

    private void go() throws Exception {

        Document doc = new Document();
        PdfWriter.getInstance(doc, new FileOutputStream(RESULT));
        doc.open();

        PdfPTable mainTable = new PdfPTable(3);
        PdfPCell cell;

        for (int i = 0; i < data.length; i+=2) {
            cell = new PdfPCell(new Phrase(data[i]));
            PdfPTable table = new PdfPTable(1);
            table.addCell(cell);
            if (i+1 <= data.length -1) {
               cell = new PdfPCell(new Phrase(data[i + 1]));
               table.addCell(cell);
            } else {
                cell = new PdfPCell(new Phrase(""));
                table.addCell(cell);
            }
            mainTable.addCell(table);
        }

        doc.add(mainTable);
        doc.close();

    }
}
于 2013-05-23T17:27:17.853 回答
0

一种方法是为每个主列创建列 no = 1 的内部表,并将其添加到主表中。

private static PdfPTable writeColumnWise(String[] data, int noOfColumns, int noOfRows) {

    PdfPTable table = new PdfPTable(noOfColumns);
    PdfPTable columnTable = new PdfPTable(1);
    columnTable.getDefaultCell().setBorderWidth(0.0f);
    columnTable.getDefaultCell().setPadding(0.0f);

    for(int i=0; i<data.length; i++){
        if( i != 0 && i % noOfRows == 0 ){
            // add columnTable into main table
            table.addCell(columnTable);

            //re initialize columnTable for next column
            columnTable = new PdfPTable(1);
            columnTable.getDefaultCell().setBorderWidth(0.0f);
            columnTable.getDefaultCell().setPadding(0.0f);
        }

        PdfPCell cell = new PdfPCell(new Paragraph(data[i]));
        columnTable.addCell(cell);
    }

    // add columnTable for last column into main table
    table.addCell(columnTable);

    return table;
}
于 2019-03-08T08:29:03.860 回答