/*
* $Id$
*
* This code is part of the 'iText Tutorial'.
* You can find the complete tutorial at the following address:
* http://itextdocs.lowagie.com/tutorial/
*
* This code is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
* itext-questions@lists.sourceforge.net
*/
package com.lowagie.examples.objects.tables.pdfptable;
import com.lowagie.text.LwgDocument;
import com.lowagie.text.LwgElement;
import com.lowagie.text.LwgFont;
import com.lowagie.text.LwgPageSize;
import com.lowagie.text.LwgPhrase;
import com.lowagie.text.LwgRectangle;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.PdfAction;
import com.lowagie.text.pdf.PdfContentByte;
import com.lowagie.text.pdf.LwgPdfPTable;
import com.lowagie.text.pdf.PdfPTableEvent;
import com.lowagie.text.pdf.PdfWriter;
import org.geoforge.demo.GfrFileOutputStream;
/**
* General example using TableEvents (with colspan).
*/
public class TableEvents2 implements PdfPTableEvent {
/**
* @see com.lowagie.text.pdf.PdfPTableEvent#tableLayout(com.lowagie.text.pdf.PdfPTable, float[][], float[], int, int, com.lowagie.text.pdf.PdfContentByte[])
*/
public void tableLayout(LwgPdfPTable table, float[][] width, float[] heights, int headerRows, int rowStart, PdfContentByte[] canvases) {
// widths of the different cells of the first row
float widths[] = width[0];
PdfContentByte cb = canvases[LwgPdfPTable.TEXTCANVAS];
cb.saveState();
// border for the complete table
cb.setLineWidth(2);
cb.setRGBColorStroke(255, 0, 0);
cb.rectangle(widths[0], heights[heights.length - 1], widths[widths.length - 1] - widths[0], heights[0] - heights[heights.length - 1]);
cb.stroke();
// border for the header rows
if (headerRows > 0) {
float headerHeight = heights[0];
for (int k = 0; k < headerRows; ++k)
headerHeight += heights[k];
cb.setRGBColorStroke(0, 0, 255);
cb.rectangle(widths[0], heights[headerRows], widths[widths.length - 1] - widths[0], heights[0] - heights[headerRows]);
cb.stroke();
}
cb.restoreState();
cb = canvases[LwgPdfPTable.BASECANVAS];
cb.saveState();
// border for the cells
cb.setLineWidth(.5f);
// loop over the rows
for (int line = 0; line < heights.length - 1; ++line) {
widths = width[line];
// loop over the columns
for (int col = 0; col < widths.length - 1; ++col) {
if (line == 0 && col == 0)
cb.setAction(new PdfAction("http://www.lowagie.com/iText/"),
widths[col], heights[line + 1], widths[col + 1], heights[line]);
cb.setRGBColorStrokeF((float)Math.random(), (float)Math.random(), (float)Math.random());
// horizontal borderline
cb.moveTo(widths[col], heights[line]);
cb.lineTo(widths[col + 1], heights[line]);
cb.stroke();
// vertical borderline
cb.setRGBColorStrokeF((float)Math.random(), (float)Math.random(), (float)Math.random());
cb.moveTo(widths[col], heights[line]);
cb.lineTo(widths[col], heights[line + 1]);
cb.stroke();
}
}
cb.restoreState();
}
/**
* General example using table events (with colspan).
* @param args
* no arguments needed
*/
public static void main(String[] args) {
System.out.println("Table Events 2");
// step1
LwgDocument document = new LwgDocument(LwgPageSize.A4, 50, 50, 50, 50);
try {
// step2
PdfWriter writer = PdfWriter.getInstance(document,
new GfrFileOutputStream("com.lowagie.examples.objects.tables.pdfptable.TableEvents2.pdf"));
// step3
document.open();
// step4
LwgPdfPTable table = new LwgPdfPTable(4);
table.getDefaultCell().setBorder(LwgRectangle.NO_BORDER);
for (int k = 0; k < 24; ++k) {
if (k != 0)
table.add(String.valueOf(k));
else {
table.getDefaultCell().setColspan(3);
table.getDefaultCell().setHorizontalAlignment(LwgElement.ALIGN_CENTER);
table.add("This is a very big URL");
table.getDefaultCell().setColspan(1);
table.getDefaultCell().setHorizontalAlignment(LwgElement.ALIGN_LEFT);
k += 2;
}
}
TableEvents2 event = new TableEvents2();
table.setTableEvent(event);
// add the table with document add
document.add(table);
// add the table at an absolute position
table.setTotalWidth(300);
table.writeSelectedRows(0, -1, 100, 600, writer.getDirectContent());
document.newPage();
table = new LwgPdfPTable(4);
float fontSize = 12;
BaseFont bf = BaseFont.createFont("Helvetica", "winansi", false);
table.getDefaultCell().setPaddingTop(bf.getFontDescriptor(BaseFont.ASCENT, fontSize) - fontSize + 2);
table.getDefaultCell().setBorder(LwgRectangle.NO_BORDER);
for (int k = 0; k < 500 * 4; ++k) {
if (k == 0) {
table.getDefaultCell().setColspan(4);
table.getDefaultCell().setHorizontalAlignment(LwgElement.ALIGN_CENTER);
table.add(new LwgPhrase("This is an URL", new LwgFont(bf, fontSize * 2)));
table.getDefaultCell().setColspan(1);
table.getDefaultCell().setHorizontalAlignment(LwgElement.ALIGN_LEFT);
k += 3;
}
else
table.add(new LwgPhrase(String.valueOf(k), new LwgFont(bf, fontSize)));
}
table.setTableEvent(event);
table.setHeaderRows(3);
document.add(table);
}
catch (Exception de) {
de.printStackTrace();
}
// step5
document.close();
}
}