JSP y FOP

ana_isabel
11 de Mayo del 2004
Quiero transformar un XML y XSL en PDF. Esto lo estoy haciendo a traves de FOP. El problema surge cuando esto lo intento ejecutar desde un JSP o un servlet. En ese momento aparece un error TUTALII. Alguien puede ayudarme. Gracias de antemano.

rczp69
11 de Mayo del 2004
Hola, no se muy bien que error es el que te da, ni donde tienes el error, porque no lo especificas en cualquier mira este Servlet que lee un xml, y un xsl del Web-inf de un modulo web y realiza la transformacion que quieres .

import java.io.IOException;
import java.io.InputStream;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.transform.Templates;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.sax.SAXResult;
import javax.xml.transform.stream.StreamSource;

import org.apache.fop.apps.Driver;
import org.xml.sax.ContentHandler;

/**
* @version 1.0
* @author
*/
public class PruebaFop extends HttpServlet {

/**
* @see javax.servlet.http.HttpServlet#void (javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
private Templates templates= null;
private InputStream xsl= null;
private InputStream xml= null;

public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
this.doPost( req, resp);
}

/**
* @see javax.servlet.http.HttpServlet#void (javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
Driver driver = null;
driver = new Driver();
driver.setRenderer(Driver.RENDER_PDF);
resp.setContentType("application/pdf");
driver.setOutputStream(resp.getOutputStream());
System.out.println("driver configurado");
transformacion(driver.getContentHandler());

}

/**
* @see javax.servlet.GenericServlet#void ()
*/
public void init() throws ServletException {
super.init();
System.setProperty("org.xml.sax.driver", "org.apache.xerces.parsers.SAXParser");



this.xsl=this.getServletContext().getResourceAsStream("/WEB-INF/xsl/first.xsl");
this.xml=this.getServletContext().getResourceAsStream("/WEB-INF/xml/first.xml");


}



protected final void transformacion(ContentHandler saxContentHandler)
throws ServletException {
TransformerFactory factory = null;
Transformer transformer= null;

try {
factory = TransformerFactory.newInstance();
this.templates=factory.newTemplates(new StreamSource(this.xsl));
transformer=this.templates.newTransformer();
transformer.transform(new StreamSource(this.xml), new SAXResult(saxContentHandler));
} catch (TransformerConfigurationException e) {
throw new ServletException("Error de configuracion.", e);
} catch (TransformerException e) {
throw new ServletException("Error de configuración.", e);
}
}


}

First.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<prueba>
<mensaje>Hola caracola</mensaje>
</prueba>

First.xsl

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:template match="/">
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="helloWorld"
page-height="29.7cm" page-width="21cm"
margin-top="1cm" margin-bottom="2cm"
margin-left="2.5cm" margin-right="2.5cm">
<fo:region-body margin-top="3cm"/>
<fo:region-before extent="3cm"/>
<fo:region-after extent="1.5cm"/>
</fo:simple-page-master> </fo:layout-master-set>

<fo:page-sequence master-reference="helloWorld">
<fo:flow flow-name="xsl-region-body">
<fo:block font-size="18pt" font-family="sans-serif" line-height="24pt"
space-after.optimum="15pt" background-color="blue" color="red"
text-align="center" padding-top="3pt">
<xsl:value-of select="./prueba/mensaje"/>

</fo:block>

</fo:flow>
</fo:page-sequence>
</fo:root>
</xsl:template>
</xsl:stylesheet>

Salu2.