我将Java与iText一起使用,以生成一些PDF。我需要将文本放在列中,因此我正在尝试使用PdfPTable。我用以下方法创建它:

myTable = new PdfPTable(n);
n是列数。问题是PdfPTable逐行填充表格,也就是说,您首先在第1行的第1列中输入单元格,然后在第1行的第2列中输入单元格,依此类推,但是我需要逐列进行操作,因为是如何将数据提供给我的。

我将像http://stderr.org/doc/libitext-java-doc/www/tutorial/ch05.html一样使用Table(可让您指定位置),但出现“无法解析为类型”的问题,并且Eclipse无法找到正确的导入。

编辑:如果我以前的解释令人困惑,我想要的是按以下顺序填写表格:
1  3  5
2  4  6

代替这个:
1  2  3
4  5  6

最佳答案

这是一种方法:在您的情况下,使用所需的列数创建PdfPTable。3.对于数据的每次迭代,请创建一个具有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();

    }
}

关于java - 如何使用iText逐列而不是逐行填充PdfPTable,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14811161/

10-12 14:12