PDF Java Tutorial

import java.awt.Color;
import java.io.FileOutputStream;
import com.lowagie.text.Chunk;
import com.lowagie.text.Document;
import com.lowagie.text.Paragraph;
import com.lowagie.text.Rectangle;
import com.lowagie.text.pdf.PdfContentByte;
import com.lowagie.text.pdf.PdfPageEventHelper;
import com.lowagie.text.pdf.PdfWriter;
public class MainClass {
  public static void main(String[] args) throws Exception {
    Document document = new Document();
    PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("2.pdf"));
    writer.setPageEvent(new MyPdfPageEventHelper());
    document.open();
    Paragraph p = new Paragraph();
    Chunk fox = new Chunk("test");
    fox.setGenericTag("box");
    p.add(fox);
    p.add(" this is a test ");
    Chunk dog = new Chunk("test ");
    dog.setGenericTag("ellipse");
    p.add(dog);
    document.add(p);
    document.close();
  }
}
class MyPdfPageEventHelper extends PdfPageEventHelper {
  public void onGenericTag(PdfWriter writer, Document document, Rectangle rect, String text) {
    if ("ellipse".equals(text)) {
      PdfContentByte cb = writer.getDirectContent();
      cb.setRGBColorStroke(0xFF, 0x00, 0x00);
      cb.ellipse(rect.left(), rect.bottom() - 5f, rect.right(), rect.top());
      cb.stroke();
      cb.resetRGBColorStroke();
    } else if ("box".equals(text)) {
      PdfContentByte cb = writer.getDirectContentUnder();
      rect.setBackgroundColor(new Color(0xa5, 0x2a, 0x2a));
      cb.rectangle(rect);
    }
  }
}