Index: /Users/eredmond/Svn/maven/trunks/sandbox/doxia/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/AbstractITextBookRenderer.java =================================================================== --- /Users/eredmond/Svn/maven/trunks/sandbox/doxia/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/AbstractITextBookRenderer.java (revision 544906) +++ /Users/eredmond/Svn/maven/trunks/sandbox/doxia/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/AbstractITextBookRenderer.java (working copy) @@ -24,11 +24,14 @@ import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; +import java.net.URL; +import java.net.URLClassLoader; import java.text.DateFormat; import java.util.ArrayList; import java.util.Date; import java.util.Iterator; import java.util.List; +import java.util.StringTokenizer; import org.apache.maven.doxia.Doxia; import org.apache.maven.doxia.book.BookDoxiaException; @@ -61,6 +64,12 @@ */ private Doxia doxia; + /** + * @plexus.configuration + * default-value="src/site/resources" + */ + protected String imageDirs; + // ---------------------------------------------------------------------- // BookRenderer Implementation // ---------------------------------------------------------------------- @@ -231,8 +240,10 @@ // // ---------------------------------------------------------------------- - Sink itextSink = new ITextSink( writer ); + ITextSink itextSink = new ITextSink( writer ); + populateClassloader( itextSink ); + List pipeline = new ArrayList(); // pipeline.add( DebugSink.newInstance() ); pipeline.add( itextSink ); @@ -260,6 +271,48 @@ // writer.endElement(); // section } + /** + * Adds image URLs to the ITextSink Classloader if imageDirs is set. + * @param itextSink + */ + private void populateClassloader( ITextSink itextSink ) + { + if( imageDirs != null ) + { + boolean isDebug = getLogger().isDebugEnabled(); + + ArrayList dirList = new ArrayList(); + + for( StringTokenizer tokenizer = new StringTokenizer( imageDirs, "," ); + tokenizer.hasMoreTokens(); + dirList.add( tokenizer.nextToken() ) ); + + URL[] urls = new URL[ dirList.size() ]; + + for( int i = 0; i < dirList.size(); i++ ) + { + String dir = String.valueOf( dirList.get( i ) ); + try + { + urls[i] = new File( dir ).toURL(); + + if( isDebug ) + { + getLogger().debug( "Adding directory to ClassLoader " + dir ); + } + } + catch( Exception e ) + { + getLogger().warn( "Cannot convert file name to URL: " + dir ); + } + } + URLClassLoader urlClassLoader = + new URLClassLoader( urls, Thread.currentThread().getContextClassLoader() ); + + itextSink.setClassLoader( urlClassLoader ); + } + } + private void startTitle( PrettyPrintXMLWriter writer, String leading, String font, String size, String fontstyle, String red, String green, String blue ) {