You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-users@xmlgraphics.apache.org by Braumüller,
Hans <H....@hanseorga.de> on 2004/09/07 16:57:34 UTC
!newbie generating pdf from xml-source as stream
Hello,
i am trying to generate pdf on fly from dynamic xml-source adapting the official fopservlet.java example to display it on the IE6 Browser. I am also beginning with java.
Here goes my code, where sXSL is the Url to my stylesheet:
<snip>
InputSource xslSource = new InputSource(new URL(sXSL).openStream());
InputSource xmlSource = new InputSource (new StringReader(sReturnString));
XSLTInputHandler input = new XSLTInputHandler(xslSource, xmlSource);
//StreamSource xmlSource = new StreamSource(new StringReader(sReturnString));
renderXML(input, c_response);
</snip>
where renderXML is slightly different from the original
<snip>
public void renderXML(XSLTInputHandler input,
HttpServletResponse response) throws ServletException {
try {
log("renderXML");
ByteArrayOutputStream out = new ByteArrayOutputStream();
response.setContentType("application/pdf");
response.setHeader( "Content-disposition","inline; filename=test.pdf" );
Driver driver = new Driver();
driver.setLogger(logPDF);
driver.setRenderer(Driver.RENDER_PDF);
driver.setOutputStream(out);
driver.render(input.getParser(), input.getInputSource());
byte[] content = out.toByteArray();
response.setContentLength(content.length);
response.getOutputStream().write(content);
response.getOutputStream().flush();
} catch (Exception ex) {
throw new ServletException(ex);
}
}
</snip>
What is wrong ?
if have also tried do it with the transformer object:
<snip>
public void generatePdf(String xml, String xslPfad, OutputStream pdfOutput) throws Exception {
try{
c_response.setContentType("application/pdf");
c_response.setHeader( "Content-disposition","inline; filename=test.pdf" );
Source streamSource = new StreamSource(new URL(xslPfad).openStream());
Source saxSource = new SAXSource(new InputSource(new StringReader(xml)));
Driver driver = new Driver();
Logger logger = new ConsoleLogger(ConsoleLogger.LEVEL_WARN);
MessageHandler.setScreenLogger(logger);
driver.setLogger(logger);
//driver.setLogger(getLogger());
driver.setRenderer(Driver.RENDER_PDF);
driver.setOutputStream(pdfOutput);
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer(streamSource);
Result result = new SAXResult(driver.getContentHandler());
transformer.transform(saxSource, result);
}
catch (Exception e) { }
finally{
//pdfOutput.close();
}
}
</snip>
calling this with:
<snip>
OutputStream out = new ByteArrayOutputStream();
try {
generatePdf(sReturnString, sXSL, out);
}
catch (Exception e) { }
</snip>
Thanks for your help,
Hans Braumüller
---------------------------------------------------------------------
To unsubscribe, e-mail: fop-user-unsubscribe@xml.apache.org
For additional commands, e-mail: fop-user-help@xml.apache.org
Re: !newbie generating pdf from xml-source as stream
Posted by "J.Pietschmann" <j3...@yahoo.de>.
Braumüller wrote:
> i am trying to generate pdf on fly from dynamic xml-source
...
> What is wrong ?
I have no idea. Would you care to describe what you expect,
and what you got instead?
Does your browser open a PDF viewer? Do you get error
messages? Which messages? Can you download the expected
content using a command line tool?
BTW
InputSource xmlSource =
new InputSource(new StringReader(sReturnString));
In 99% of all cases I've seen this kind of code
indicates either a major design flaw or that you are
using the wrong tool to solve your problem.
J.Pietschmann
---------------------------------------------------------------------
To unsubscribe, e-mail: fop-user-unsubscribe@xml.apache.org
For additional commands, e-mail: fop-user-help@xml.apache.org