2014-12-03 25 views
0

我目前正在使用iText進行.pdf生成。我的一種方法是創建,格式化並將單元格添加到Table對象中,但對於這個特定的表格,有許多單元格(20-30),並且方法本身已經大大增加。iText:如何重構代碼以避免在方法中使用多個addCell

方法的結構如下:

/*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將採取將在改變每個小區

+0

使用列表或數組? – 2014-12-03 17:10:27

+0

你甚至需要以後訪問它們嗎?如果沒有,爲什麼甚至把他們列入清單?只需爲20+迭代進行循環,並在循環體內創建一個單元格,對其進行格式化並將其添加到表中。這假定創建,格式化和添加到表格都可以一次對每個單元格發生,而不需要像現在這樣在同一時間對所有單元格執行每個步驟。 – ajp15243 2014-12-03 17:14:44

+0

根據你的編輯,你將需要添加細節(或者自己調整已經給出的解決方案),以確定如何確定創建'段落'和'formatCell'的布爾值所要傳遞的值,假設它們對於不同的細胞都是不同的。 – ajp15243 2014-12-03 17:18:41

回答

1

則可以將細胞添加到ArrayList一個布爾值參數,然後循環throught的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))); 
    } 
} 
+0

會不會導致ArrayList.add(cell)的20-30行? – jbailie1991 2014-12-03 17:13:15

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); 
} 
相關問題