PDF image support for Apache FOP
Copyright 2012 The Apache Software Foundation
Copyright 2007-2012 Jeremias Maerki and contributors.

This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).

