import java.io.BufferedOutputStream; import java.io.File; import java.io.IOException; import java.io.OutputStream; import org.apache.fop.apps.FOUserAgent; import org.apache.fop.apps.Fop; import org.apache.fop.apps.FopFactory; import org.apache.fop.apps.FormattingResults; import org.apache.fop.apps.MimeConstants; import org.apache.fop.apps.PageSequenceResults; import java.io.FileOutputStream; import javax.xml.transform.Result; import javax.xml.transform.Source; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.URIResolver; import javax.xml.transform.sax.SAXResult; import javax.xml.transform.stream.StreamSource; class TestUriResolver implements URIResolver { @Override public Source resolve(String href, String base) throws TransformerException { if(href.endsWith(".png")) { File f=new File(href); System.out.println("resolve on "+href+" canRead returns " + f.canRead()); return new StreamSource(new File(href)); } else { return null; } } } public class FopUriResolver { public void run(String fileName) throws IOException { OutputStream out = null; try { FopFactory fopFactory= FopFactory.newInstance(); FOUserAgent foUserAgent = fopFactory.newFOUserAgent(); foUserAgent.setURIResolver(new TestUriResolver()); out = new FileOutputStream(fileName+".pdf"); out = new BufferedOutputStream(out); Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, out); TransformerFactory factory = TransformerFactory.newInstance(); Transformer transformer = factory.newTransformer(); Source src = new StreamSource(fileName+".fo"); Result res = new SAXResult(fop.getDefaultHandler()); transformer.transform(src, res); } catch (Exception e) { e.printStackTrace(System.err); System.exit(-1); } finally { out.close(); } } public static void main(String[] args) throws IOException { new FopUriResolver().run("t1"); new FopUriResolver().run("t2"); } }