import java.io.FileOutputStream;

import com.lowagie.text.Chunk;
import com.lowagie.text.Document;
import com.lowagie.text.Font;
import com.lowagie.text.PageSize;
import com.lowagie.text.Paragraph;
import com.lowagie.text.pdf.MultiColumnText;
import com.lowagie.text.pdf.PdfWriter;

public class Test
{
    public static void main ( String[] args ) throws Exception
    {
    	System.out.println("BEGIN");
    	try {
    		for (int i = 1; i < 9; i++) {
				execute(i);
				System.out.println("file " + i + " written");
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		System.out.println("END");
    }
    
    private static void execute(int mode) throws Exception
    {
    	float mLeft = 40;
    	float mRight = 40;
    	float mTop = 50;
    	float mBottom = 50;
    	Document document = new Document(PageSize.A4);
    	PdfWriter.getInstance(document, new FileOutputStream("example_" + mode + ".pdf"));
    	document.open();
    	 
    	Font font1 = new Font(Font.COURIER, 10f);
    	Chunk text = new Chunk("one two three four five six seven eight nine ten ", font1);
    	MultiColumnText column = new MultiColumnText();

    	float top_gt_maxY = mTop - 20;
    	float[][] irregular_1 = {
        		{50,800,50,50},
        		{200,800,200,700,150,600,200,500,200,50}
        	};
    	float[][] irregular_2 = {
        		{250,800,400,400,250,50},
        		{500,800,500,50}
        	};
    	float[][] regular_1 = {
        		{50,800,50,50},
        		{200,800,200,50}
        	};
    	float[][] regular_2 = {
    		{250,800,250,50},
    		{500,800,500,50}
    	};
    	
    	switch (mode) {
		case 1:
	    	document.setMargins(mLeft, mRight, mTop, mBottom);
	    	column.addColumn(regular_1[0], regular_1[1]);
	    	column.addColumn(regular_2[0], regular_2[1]);
			break;
		case 2:
	    	document.setMargins(mLeft, mRight, top_gt_maxY, mBottom);
	    	column.addColumn(regular_1[0], regular_1[1]);
	    	column.addColumn(regular_2[0], regular_2[1]);
			break;
		case 3:
	    	document.setMargins(mLeft, mRight, mTop, mBottom);
	    	column.addColumn(irregular_1[0], irregular_1[1]);
	    	column.addColumn(regular_2[0], regular_2[1]);
			break;
		case 4:
	    	document.setMargins(mLeft, mRight, top_gt_maxY, mBottom);
	    	column.addColumn(irregular_1[0], irregular_1[1]);
	    	column.addColumn(regular_2[0], regular_2[1]);
			break;
		case 5:
	    	document.setMargins(mLeft, mRight, mTop, mBottom);
	    	column.addColumn(regular_1[0], regular_1[1]);
	    	column.addColumn(irregular_2[0], irregular_2[1]);
			break;
		case 6:
	    	document.setMargins(mLeft, mRight, top_gt_maxY, mBottom);
	    	column.addColumn(regular_1[0], regular_1[1]);
	    	column.addColumn(irregular_2[0], irregular_2[1]);
			break;
		case 7:
	    	document.setMargins(mLeft, mRight, mTop, mBottom);
	    	column.addColumn(irregular_1[0], irregular_1[1]);
	    	column.addColumn(irregular_2[0], irregular_2[1]);
			break;
		case 8:
	    	document.setMargins(mLeft, mRight, top_gt_maxY, mBottom);
	    	column.addColumn(irregular_1[0], irregular_1[1]);
	    	column.addColumn(irregular_2[0], irregular_2[1]);
			break;
		default:
			break;
		}
    	System.out.print("top=" + document.top() + " - ");
    	
    	for (int i = 0; i < 100; i++) {
    		column.addElement(text);
    	}
    	column.addElement(new Paragraph("sdfsdfsdfs"));
    	column.setAlignment(MultiColumnText.ALIGN_JUSTIFIED);
    	document.add(column);
    	document.close();
    }
} 