Matthias,

you can upgrade to 0.9x versions of FOP if you implement a cocoon serializer by your own, as i did for my own project. I'ver attached my pretty simple java code, that might be improved if needed ;-). Just provide this to the cocoon classpath, replace the fop jars with current 0.9x builds and add the serializer inside the cocoon "sitemap.xmap":

<map:serializer name="fo2pdf" mime-type="application/pdf" src="CocoonFOPSerializer"> <set-content-length>false</set-content-length>
</map:serializer>

HTH, Arne

Matthias Müller wrote:
Thx for your experiences. I can't upgrade to 0.93 since it's not supported by 
the latest stable apache cocoon version. i desire the upcoming version 2.2 
since months ;-)
Thx Louis for the code snippet. i try to figure out why i have such a large 
increasement. I'll let you kow,

greetings matthias
<snip/>
/*
 * Created on 03.07.2006
 * 
 */

import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.io.Serializable;

import org.apache.avalon.framework.configuration.Configurable;
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.ConfigurationException;
import org.apache.avalon.framework.configuration.DefaultConfigurationBuilder;
import org.apache.avalon.framework.logger.Logger;
import org.apache.avalon.framework.service.ServiceException;
import org.apache.avalon.framework.service.ServiceManager;
import org.apache.avalon.framework.service.Serviceable;
import org.apache.cocoon.caching.CacheableProcessingComponent;
import org.apache.cocoon.serialization.AbstractSerializer;
import org.apache.excalibur.source.SourceValidity;
import org.apache.fop.apps.FOUserAgent;
import org.apache.fop.apps.Fop;
import org.apache.fop.apps.FopFactory;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;


/**
 * Cocoon FOP serializer implementpation.
 *
 * @author Arne Hildebrand 
 * @version 1.0
 */

public class CocoonFOPSerializer extends AbstractSerializer implements 
Configurable, CacheableProcessingComponent, Serviceable {

    protected Logger logger = null;

    protected String mimetype = null;

    protected boolean setContentLength = true;

    protected FOUserAgent userAgent = null;

    protected Fop fop = null;

    protected ServiceManager manager = null;

    protected javax.xml.transform.stream.StreamResult res = null;

    private FopFactory fopFactory = null;

    public void service(ServiceManager manager) throws ServiceException {
        this.manager = manager;
    }

    public void configure(Configuration conf) throws ConfigurationException {
        this.logger = getLogger().getChildLogger("fop");

        this.setContentLength = 
conf.getChild("set-content-length").getValueAsBoolean(true);
        this.mimetype = conf.getAttribute("mime-type");

        // TODO get and use user configuration
        // TODO get and use user's renderer definition, ...

    }

    public String getMimeType() {
        return this.mimetype;
    }

    public void setOutputStream(OutputStream o) {
        DefaultHandler dh = null;

        try {
            // get user agent & configure it
            userAgent = getFopFactory().newFOUserAgent();
            userAgent.setTargetResolution(150);
            userAgent.setCreator("http://www.link-lab.net";);

            // create new fop for transformation
            fop = fopFactory.newFop(this.getMimeType(), userAgent, o);
            dh = fop.getDefaultHandler();
            setContentHandler(dh);
        }
        catch (Exception ex) {
            ex.printStackTrace();

        }
    }

    private FopFactory getFopFactory() throws ConfigurationException, 
SAXException, IOException {
        if (fopFactory == null) {
            fopFactory = FopFactory.newInstance();
            // use custom config file if exists
            DefaultConfigurationBuilder cfgBuilder = new 
DefaultConfigurationBuilder();
            File cfgFile = new File("conf/fop-config.xml");
            if (cfgFile.exists()) {
                Configuration cfg = cfgBuilder.buildFromFile(cfgFile);
                fopFactory.configure(cfg);
            }

        }
        return fopFactory;
    }

    public Serializable getKey() {
        return "0";
    }

    public SourceValidity getValidity() {
        return null; // NOPValidity.SHARED_INSTANCE;
    }

    public void recycle() {
        super.recycle();
        this.userAgent = null;
        this.fop = null;
    }

    public boolean shouldSetContentLength() {
        return this.setContentLength;
    }

}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to