package chiralsoftware.pdf.ui; import javax.faces.component.UIComponent; import javax.faces.context.FacesContext; import javax.faces.context.ResponseWriter; import java.awt.Graphics2D; import java.awt.Color; import org.jboss.seam.pdf.ui.ITextComponent; import org.jboss.seam.pdf.ui.UIDocument; import com.lowagie.text.pdf.PdfWriter; import com.lowagie.text.pdf.DefaultFontMapper; import com.lowagie.text.pdf.PdfContentByte; import com.lowagie.text.pdf.PdfTemplate; import com.lowagie.text.Image; import com.lowagie.text.ImgTemplate; public class RedOval extends ITextComponent { private int height = 300; private int width = 400; public void setHeight(int height) { this.height = height; } public int getHeight() { return (Integer) valueBinding(FacesContext.getCurrentInstance(), "height", height); } public void setWidth(int width) { this.width = width; } public int getWidth() { return (Integer) valueBinding(FacesContext.getCurrentInstance(), "width", width); } @Override public void createITextObject(FacesContext context) { final UIDocument doc = (UIDocument) findITextParent(getParent(), UIDocument.class); if (doc != null) { final PdfWriter writer = (PdfWriter) doc.getWriter(); final PdfContentByte cb = writer.getDirectContent(); final PdfTemplate tp = cb.createTemplate(getWidth(), getHeight()); final Graphics2D g2 = tp.createGraphics(getWidth(),getHeight()); g2.setColor(Color.RED); g2.fillOval(0,0,getWidth(),getHeight()); g2.dispose(); // Note: in a production system, exceptions should be // handled in a better way try { component = new ImgTemplate(tp); } catch(Exception e) { System.out.println(e.getMessage()); } } } private Image component = null; @Override public void handleAdd(Object arg0) { throw new RuntimeException("No children allowed"); } @Override public void removeITextObject() { component = null; } /** This must return a com.lowagie.text.Element object, * or else it will throw a IllegalArgumentException("cannot add " + o) */ @Override public Object getITextObject() { return component; } }