iText:如何重构代码以避免方法中出现多个addCell

时间:2014-12-03 17:07:42

标签: java itext

我目前正在使用iText进行.pdf生成。我的一种方法是创建,格式化和向Cell对象添加单元格,但是对于这个特定的表有许多单元格(20-30),并且该方法本身已经大大增加。

该方法的结构如下:

/*create cells*/
Cell c1 = new Cell(new Paragraph("text1", textFont));
//...and so on for 20+ cells

/*format cell with custom method formatCell()*/
formatCell(c1, false);
//...and so on for 20+ cells

/*add cells to table object*/
table1.addCell(c1);
//...and so on again for 20+ cells

有没有一种方法可以在没有addCell语句流的情况下将单元格添加到表中?

编辑:我应该提到的(道歉)是formatCell将采用一个布尔参数,该参数将在每个单元格的基础上改变

2 个答案:

答案 0 :(得分:1)

您可以将您的单元格添加到ArrayList,然后遍历List

例如:

List<Cell> cells = new ArrayList<Cell>();
cells.add(new Cell(new Paragraph("text1", textFont)));
//...and so on for 20+ cells

for(Cell cell:cells){
    formatCell(cell, false);
    table1.addCell(cell);
}

要创建单元格列表,您可以创建一个像这样的方法

private static List<Cell> createCells(Font textFont, String... texts){
    List<Cell> cells = new ArrayList<Cell>();
    for(String text: texts){
        cells.add(new Cell(new Paragraph(text, textFont)));
    }
}

答案 1 :(得分:1)

您可以使用List

final List<Cell> cells = new ArrayList<>();
/*create cells*/
cells.add(/* c1 */ new Cell(new Paragraph("text1", textFont)));
//...and so on for 20+ cells

/*format cell with custom method formatCell()*/
for (final Cell cell : cells) {
    formatCell(cell, false);
}

/*add cells to table object (or use the previous loop if nothing inbetween) */
for (final Cell cell : cells) {
    table1.addCell(cell);
}