IText + Custom component + ClassNotFoundException
sriramsudheer Apr 16, 2008 7:58 AM
package xyz.components;
import java.io.IOException;
import java.io.Serializable;
import javax.faces.context.FacesContext;
import org.jboss.seam.annotations.In;
import org.jboss.seam.log.Log;
import org.jboss.seam.pdf.ui.ITextComponent;
import org.jboss.seam.pdf.ui.UIDocument;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Image;
import com.lowagie.text.ImgTemplate;
import com.lowagie.text.pdf.BarcodeEAN;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.PdfContentByte;
import com.lowagie.text.pdf.PdfTemplate;
import com.lowagie.text.pdf.PdfWriter;
public class UIPdfLabel extends ITextComponent implements Serializable{
              
   // @In Log log;
    
    public UIPdfLabel() {
         
    }
    @Override
    public void createITextObject(FacesContext context) {
    
    int x=10;
    int y=50;
         
     final UIDocument doc = (UIDocument) findITextParent(getParent(), UIDocument.class);
     if (doc != null) {
          
         final PdfWriter writer = (PdfWriter) doc.getWriter();
         final PdfContentByte cb = writer.getDirectContent();
         BaseFont descriptionFont = null;
         BaseFont apn_wareHouseFont = null;
         BaseFont supplierFont = null;
         BaseFont sellFont = null;
         BaseFont typeFont = null;
         BaseFont barcodeFont = null;
          try {
               descriptionFont = BaseFont.createFont(BaseFont.TIMES_BOLD, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
               apn_wareHouseFont = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
               supplierFont = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
               sellFont = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
               typeFont = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
               //barcodeFont = BaseFont.createFont("msi1.afm", BaseFont.WINANSI, BaseFont.EMBEDDED);
          } catch (DocumentException e1) {
               
               e1.printStackTrace();
          } catch (IOException e1) {
               
               e1.printStackTrace();
          }
         cb.beginText();
         cb.setFontAndSize(descriptionFont, 14);
         cb.setTextMatrix(x, y);
         cb.showText("Centrom Tab 600MG 60TABS");
         cb.endText();
         
         cb.beginText();
         cb.setFontAndSize(apn_wareHouseFont, 8);
         cb.setTextMatrix(x, y-8);
         cb.showText("0433769499 T");
         cb.endText();
         
         cb.beginText();
         cb.setFontAndSize(sellFont, 36);
         cb.setTextMatrix(x+120, y-34);
         cb.showText("$12.34");
         cb.endText();
                  
         BarcodeEAN barcodeEan = new BarcodeEAN();
         barcodeEan.setCode("9780201615883");
         barcodeEan.setCodeType(BarcodeEAN.EAN13);
         cb.concatCTM(1, 0, 0, 1, x, y-42);
         barcodeEan.placeBarcode(cb, null, null);
        
         PdfTemplate template = cb.createTemplate(x,y);
         /*try {
              
               template.addImage(image);
          } catch (DocumentException e1) {
               // TODO Auto-generated catch block
               e1.printStackTrace();
          }*/
         // Note: in a production system, exceptions should be
         // handled in a better way
         try { component = new ImgTemplate(template);
         }
         catch(Exception e) {
              System.out.println("Testing PDF Label");
              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;
    }
     
     
}
facesConfig.xml:
<?xml version="1.0" encoding="UTF-8"?> <faces-config version="1.2" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"> <component> <component-type>xyz.UIPdfLabel</component-type> <component-class>xyz.UIPdfLabel</component-class> </component> <application> <view-handler>com.sun.facelets.FaceletViewHandler</view-handler> <locale-config> <default-locale>en</default-locale> <supported-locale>bg</supported-locale> <supported-locale>de</supported-locale> <supported-locale>en</supported-locale> <supported-locale>fr</supported-locale> <supported-locale>tr</supported-locale> </locale-config> </application> </faces-config>
and taglib.xml is
<?xml version="1.0"?> <!DOCTYPE facelet-taglib PUBLIC "-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN" "facelet-taglib_1_0.dtd"> <facelet-taglib> <namespace>http://xyz/products/dvComponents</namespace> <tag> <tag-name>pdfLabel</tag-name> <component> <component-type>xyz.UIPdfLabel</component-type> </component> </tag> </facelet-taglib>
and I am Getting CLassNotFound Exception could any one help what i am missing 
Thank You In Advance
<p:document type="PDF" pageSize="A4" title="barcode" margins="1 1 1 1" xmlns="http://www.w3.org/1999/xhtml" xmlns:s="http://jboss.com/products/seam/taglib" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:rich="http://richfaces.org/rich" xmlns:dvComponent="http://xyz/products/dvComponents" xmlns:p="http://jboss.com/products/seam/pdf" template="layout/shelfTemplate.xhtml"> <dvComponent:pdfLabel> </dvComponent:pdfLabel> </p:document>
 
    