Writer writer = null;
try
{
writer = WriterFactory.newXmlWriter( outputFOFile );
FoAggregateSink sink = new FoAggregateSink( writer );
File fOConfigFile = new File( outputDirectory, "pdf-config.xml" );
if ( fOConfigFile.exists() )
{
sink.load( fOConfigFile );
getLogger().debug( "Loaded pdf config file: " + fOConfigFile.getAbsolutePath() );
}
String generateTOC =
( context != null && context.get( "generateTOC" ) != null ? context.get( "generateTOC" ).toString().trim()
: "start" );
int tocPosition = 0;
if ( "start".equalsIgnoreCase( generateTOC ) )
{
tocPosition = FoAggregateSink.TOC_START;
}
else if ( "end".equalsIgnoreCase( generateTOC ) )
{
tocPosition = FoAggregateSink.TOC_END;
}
else
{
tocPosition = FoAggregateSink.TOC_NONE;
}
sink.setDocumentModel( documentModel, tocPosition );
sink.beginDocument();
sink.coverPage();
if ( tocPosition == FoAggregateSink.TOC_START )
{
sink.toc();
}
if ( ( documentModel.getToc() == null ) || ( documentModel.getToc().getItems() == null ) )
{
getLogger().info( "No TOC is defined in the document descriptor. Merging all documents." );
mergeAllSources( filesToProcess, sink, context );
}
else
{
getLogger().debug( "Using TOC defined in the document descriptor." );
mergeSourcesFromTOC( documentModel.getToc(), sink, context );
}
if ( tocPosition == FoAggregateSink.TOC_END )
{
sink.toc();
}
sink.endDocument();
}
finally
{
IOUtil.close( writer );
}