表格内容同时列合并和行合并

显示效果:

示例代码所生成的OFD文件:下载

 示例代码

package test.create.c04;

import iofd.layout.OfdDocument;
import iofd.layout.block.Paragraph;
import iofd.layout.block.Table;
import iofd.layout.element.table.Cell;
import iofd.layout.element.table.HeadCell;
import iofd.layout.element.table.TableRow;

import java.util.ArrayList;
import java.util.List;

import test.create.TestDocUtil;

public class C0407TableContentColumnAndRowSpan {

	public static void main(String[] args) throws Throwable {
		C0407TableContentColumnAndRowSpan o = new C0407TableContentColumnAndRowSpan();
		o.done();
	}

	private void done() throws Throwable {
		String clzName = this.getClass().getSimpleName();
		System.out.println(clzName + " begin");

		OfdDocument doc = new OfdDocument();

		String s = "这是一个插入表格的示例,这个表格内容有同时列合并和行合并的情况。";
		Paragraph p = new Paragraph();
		p.add(s);
		doc.add(p);

		TableRow row0 = new TableRow(0);
		List head0 = new ArrayList<>();
		HeadCell c = new HeadCell(0, 0, 0, 1);
		c.add("标题一");
		head0.add(c);
		c = new HeadCell(0, 1, 1, 0);
		c.add("标题二");
		head0.add(c);

		c = new HeadCell(0, 3, 0, 1);
		c.add("标题三");
		head0.add(c);

		row0.setCellList(head0);

		TableRow row1 = new TableRow(1);
		List head1 = new ArrayList<>();
		c = new HeadCell(1, 1);
		c.add("子标题一");
		head1.add(c);

		c = new HeadCell(1, 2);
		c.add("子标题二");
		head1.add(c);
		row1.setCellList(head1);

		List head = new ArrayList<>();
		head.add(row0);
		head.add(row1);

		List body = createBody();

		Table table = Table.createTable(head, body);
		doc.add(table);

		String fileName = TestDocUtil.getOfdFilePath(this.getClass());
		doc.save(fileName);
		System.out.println(clzName + " end");
	}

	private List createBody() {
		List ret = new ArrayList<>();

		for (int i = 0; i < 100; i++) {
			TableRow row = new TableRow(i);
			List cellList = new ArrayList<>();
			for(int j = 0; j < 4; j++) {
				Cell c = new Cell(i, j);
				if(j == 0) {
					if(i % 4 == 0) {
						/*
						 * 合并三行
						 * */
						c = new Cell(i, j, 0, 3);
					} else {
						/*
						 * 其他的第0行已经被合并单元格了,所以不需要在进行设置
						 * */
						continue;
					}
				} else {
					if(j == 1) {
						if(i % 2 == 0) {
							/*
							 * 合并第二列
							 * 合并下方一行
							 * */
							c = new Cell(i, j, 1, 1);
						} else {
							/*
							 * 下面的一行也不存在了
							 * */
							continue;
						}
					} else if(j == 2) {
						/*
						 * 第 三列不存在啦
						 * */
						continue;
					} else {
						c = new Cell(i, j);
					}
				}
				c.add("[" + i + "," + j + "]");
				cellList.add(c);
			}
			row.setCellList(cellList);
			ret.add(row);
		}
		
		return ret;
	}
}