Citation:
public static String process(String xml, String xsl) {
String sResult = null;
try {
ByteArrayOutputStream foOut = new ByteArrayOutputStream();
ByteArrayOutputStream bOut = new ByteArrayOutputStream();
InputStream iss = Process.class.getClassLoader().getResourceAsStream(brique);
copyFile(new BufferedInputStream(iss), bOut);
SAXBuilder builder = new SAXBuilder();
Document document = builder.build(new ByteArrayInputStream(xml.getBytes()));
TransformerFactory factory = TransformerFactory.newInstance();
InputStream iXsl = Process.class.getClassLoader().getResourceAsStream(xsl);
StreamSource iSource = new StreamSource(iXsl);
Transformer foTrans = factory.newTransformer(iSource);
StreamSource strSourceXML = new StreamSource(new ByteArrayInputStream(xml.getBytes()));
foTrans.transform(strSourceXML, new StreamResult(foOut));
foOut.flush();
ByteArrayOutputStream pdfOut = new ByteArrayOutputStream();
TransformerFactory tFactoryFO2PDF = TransformerFactory.newInstance();
Transformer pdfTrans = tFactoryFO2PDF.newTransformer();
FopFactory fopFactory = FopFactory.newInstance();
FOUserAgent foUserAgent = fopFactory.newFOUserAgent();
Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, pdfOut);
Result res = new SAXResult(fop.getDefaultHandler());
StreamSource streamSourceXml = new StreamSource(new ByteArrayInputStream(foOut.toByteArray()));
pdfTrans.transform(streamSourceXml, res);
java.io.File file = new java.io.File("d:/res.pdf");
FileOutputStream foStream = new FileOutputStream(file);
pdfOut.writeTo(foStream);
} catch(Exception e) {
e.printStackTrace();
}
return sResult;
}
private static boolean copyFile(InputStream in, OutputStream out) {
try {
int c;
while ((c = in.read()) != -1)
out.write(c);
in.close();
out.close();
} catch (IOException io) {
return false;
}
return true;
}
J'ai développé un petit web service qui ne fait qu'appeler mon application. Bien sur, le JAR de mon application se trouve dans le classpath de mon webservice.
Citation:
public static String process(String xml, String xsl) {
String sResult = null;
try {
sResult = Process.process(xml, xsl);
System.out.println("sss");
} catch(Exception e) {
e.printStackTrace();
}
return sResult;
}
Lorsque j'appelle mon webservice je le fait avec les paramètres suivants:
Citation:
xml = "<?xml version='1.0' encoding='UTF-8'?>"+
"<Catalog>"+
"<Book>"+
"<Title>Mastering EJB</Title>"+
"<Author>Ed Roman</Author>"+
"<Price>$45.00</Price>"+
"</Book>"+
"<Book>"+
"<Title>Design Patterns</Title>"+
"<Author>Erich Gamma</Author>"+
"<Price>$50.00</Price>"+
"</Book>"+
"<Book>"+
"<Title>Effective Java</Title>"+
"<Author>Josch Bloch</Author>"+
"<Price>$30.00</Price>"+
"</Book>" +
"</Catalog>";
et
xsl = "xsl2.xslt";
Lorsque j'exécute le web service, le PDF est généré. Le problème c'est qu'il est généré sans l'image.