Thanks for your answer. I am not familiarized with URIResolver but I check it and, if I understood, I must implement it creating a new class that implements the URIResolver class and the method resolve(String href, String base)
In the javadoc the definition of both arguments are: href - An href attribute, which may be relative or absolute. base - The base URI in effect when the href attribute was encountered. If I am correct HRef is the filename. So my URIResolver will have img/logo.gif as href parameter. Correct? And in the case that I dont know the name of my image indicated on the XSL? how can I solve the problem? thank you regards Philippe Voncken wrote: > > Hi, > > you must implementing the UriResolver and set your fopFactory with it. > > fopFactoy.setUriResolver() > > regards, > Philippe > > 2010/2/18 pjmorce <[email protected]> > >> >> Hello >> >> I used a simple example on the Internet about how to use FOP in java >> (http://javaboutique.internet.com/tutorials/FOP/): >> >> - I Created a simple Java application with a class that takes an XML and >> converts it into a PDF (using a XSL) containing an image. The name of my >> class is Process.java and it has a method "process". It works fine when >> called directly as a java application. >> >> - I Created a simple web service that just call this "process" method of >> that class. However, when i call the web service, i get an error: >> "[ERROR] Image not found: img/logo.gif" >> => The PDF is created but without the image. >> >> Here is the code of my Process.java class: >> >> 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; >> } >> >> >> The code of my web service is just: >> >> 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; >> } >> >> The web service has the JAR of the Java application in his classpath. The >> content of the Jar file is the following one: >> Name Path >> briques.xsd >> logo.gif img\ >> Manifest.mf meta-inf\ >> Process.class tst >> saxon-licence.lic >> xsl2.xslt >> >> I call the web service with the following parameters: >> >> 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>"; >> >> xsl = "xsl2.xslt"; >> >> In the xsl2.xslt I have a part of code like this to insert the image on >> the >> pdf: >> ... >> <fo:block> >> <fo:external-graphic src="img/logo.gif"/> >> </fo:block> >> ... >> >> >> The XSL is found in the JAR because the PDF file is generated. But the >> following error still appearing and the image is not inserted on the PDF: >> [ERROR] Image not found: img/logo.gif >> >> What am I doing wrong? >> >> Thanks >> Regards >> -- >> View this message in context: >> http://old.nabble.com/-ERROR--Image-not-found-tp27636263p27636263.html >> Sent from the FOP - Users mailing list archive at Nabble.com. >> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [email protected] >> For additional commands, e-mail: [email protected] >> >> > > -- View this message in context: http://old.nabble.com/-ERROR--Image-not-found-tp27636263p27636935.html Sent from the FOP - Users mailing list archive at Nabble.com. --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
