Hello
this seems to be exactly what I needed, too!!
Thanks a lot!
What output is this generator delivering?
Greetings Dominik

-----Ursprüngliche Nachricht-----
Von: Carmona Perez, David [mailto:[EMAIL PROTECTED]
Gesendet: Dienstag, 13. Januar 2004 18:31
An: [EMAIL PROTECTED]
Betreff: RE: Running external programs


I have created successfully a custom transformer that calls an external program.  The 
executable is searched relative to the servlet context path.

Its code is something like that (sorry is in spanish):

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.util.Map;
import java.util.Properties;

import javax.xml.transform.OutputKeys;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.sax.SAXTransformerFactory;
import javax.xml.transform.sax.TransformerHandler;
import javax.xml.transform.stream.StreamResult;

import org.apache.avalon.framework.parameters.Parameters;
import org.apache.cocoon.ProcessingException;
import org.apache.cocoon.environment.ObjectModelHelper;
import org.apache.cocoon.environment.SourceResolver;
import org.apache.cocoon.transformation.AbstractTransformer;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.XMLReaderFactory;

import fcc.ima.modelo.Conexion;
import fcc.ima.util.VarsEntorno;

public class TransfListado extends AbstractTransformer {
        public TransfListado() {
                fabrica = (SAXTransformerFactory)TransformerFactory.newInstance();
                formato.put(OutputKeys.METHOD, "xml");
                formato.put(OutputKeys.ENCODING, "ISO-8859-1");
        }
        
        /**Averigua la ubicación de listado4
         * @see 
org.apache.cocoon.sitemap.SitemapModelComponent#setup(org.apache.cocoon.environment.SourceResolver,
 java.util.Map, java.lang.String, org.apache.avalon.framework.parameters.Parameters) */
        public void setup(SourceResolver resolver, Map objectModel, String src, 
Parameters par)
                throws ProcessingException, SAXException, IOException 
        {
                if (comando == null) {
                        File rutaBase = new 
File(ObjectModelHelper.getContext(objectModel).getRealPath("informe/mostrar"));
                        // Si es Windows, anadimos  extension .exe
                        comando = new File(rutaBase, "myexcecutable.exe")).toString();
                }
        }
        /**Prepara para enviar datos a listado4*/
        protected void setOutputStream(OutputStream out) throws IOException, 
SAXException, TransformerConfigurationException {
                handler = fabrica.newTransformerHandler();
                handler.getTransformer().setOutputProperties(formato);
                handler.setResult(new StreamResult(out));
                setContentHandler(handler);
                setLexicalHandler(handler);
        }
        /**Arranca el proceso y le envía todos los eventos SAX
         * @see org.xml.sax.ContentHandler#startDocument() */
        public void startDocument() throws SAXException {
                try {
                        getLogger().debug("Arrancando listado4");
                        Map vars = VarsEntorno.getVars();
                        // Asegurarnos de q se usa el servidor de base de datos 
adecuado
                        vars.put("INFORMIXSERVER", Conexion.instancia().getServidor());
                        proceso = Runtime.getRuntime().exec(comando, 
VarsEntorno.getArray(vars));
                        setOutputStream(proceso.getOutputStream());
                } catch (Exception e) {
                        throw new SAXException(e);
                }
                super.startDocument();
        }
        /**Después de haber enviado toda la información a listado4, 
         * se lee su salida estándar y se analiza con un [EMAIL PROTECTED] XMLReader} 
         * convencional para generar nuevos eventos SAX*/
        public void endDocument() throws SAXException {
                super.endDocument();
                try {
                        // Analizo la salida de listado4
                        getLogger().debug("Leyendo resultado de listado4");
                        // Para q listado4 se entere de q no hay + datos 
                        proceso.getOutputStream().close();
                        XMLReader analizador = XMLReaderFactory.createXMLReader();
                        analizador.setContentHandler(xmlConsumer);
                        analizador.parse(new InputSource(proceso.getInputStream()));

                        /*try {
                                proceso.waitFor();
                        } catch (InterruptedException e) {
                                getLogger().warn("esperando listado4", e);
                        }
                        int codigo = proceso.exitValue();
                        if (codigo != 0) {
                                String msj = "listado4 ha devuelto el código de error 
"+codigo;
                                getLogger().error(msj);
                                throw new SAXException(msj);
                        }*/
                        getLogger().debug("listado4 terminado con éxito");
                } catch (IOException ex) {
                        throw new SAXException(ex);
                } finally {
                        proceso = null;
                }
        }
                /**Comando a ejecutar*/
        static protected String comando;
        protected TransformerHandler handler;
        protected SAXTransformerFactory fabrica;
                /**Formato de entrada*/
        protected Properties formato = new Properties();
        protected Process proceso;
}


--------
David

-----Mensaje original-----
De: Jan Wielgus [mailto:[EMAIL PROTECTED]
Enviado el: martes, 13 de enero de 2004 18:12
Para: [EMAIL PROTECTED]
Asunto: Running external programs

Hello,

I have such an approach:

I use cocoon to manage documents in xml-format which are stored in a
database. A document can be converted to LaTeX-code and here begins
my problem. So, I get the proper LaTeX-code generated and I would
like to transform it to the PDF on the server side. So, I just want
to convert it using pdflatex. So the question is, how should i do
it? With CGI? I want to get a generated PDF document and download
it. Does anybody know, how could I do it?

Jan


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

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


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

Reply via email to