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]