Hello community, 

using FOP 2.1 I occasionally get the following exception when trying to 
transform xml to pdf using images:

java.lang.IllegalStateException: ImageInputStream is not reset for: 
another_image.png
        at 
org.apache.xmlgraphics.image.loader.impl.AbstractImageSessionContext.returnSource(AbstractImageSessionContext.java:230)
        at 
org.apache.xmlgraphics.image.loader.cache.ImageCache.needImageInfo(ImageCache.java:129)
        at 
org.apache.xmlgraphics.image.loader.ImageManager.getImageInfo(ImageManager.java:139)
        at org.apache.fop.fo.flow.ExternalGraphic.bind(ExternalGraphic.java:81)



I am searching for a solution for a little while now, without success. 
My (simplified) xsl file looks like:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
                xmlns:xs="http://www.w3.org/2001/XMLSchema"; 
xmlns:fo="http://www.w3.org/1999/XSL/Format";
                exclude-result-prefixes="fo">

    <xsl:template name="whatever">
        <xsl:variable name="imageTest" as="xs:string">
            <xsl:value-of select="/report/data/whatever/image"/>
        </xsl:variable>
        <fo:block>
            <fo:external-graphic 
src="url('data:image/jpeg;base64,{$imageTest}')" content-width="scale-to-fit"
                                 content-height="scale-to-fit" 
scaling="uniform" inline-progression-dimension.maximum="160mm"
                                 block-progression-dimension.maximum="40mm"/>
        </fo:block>

        <fo:block>
            <fo:external-graphic src="another_image.png" width="13.5cm" 
content-width="scale-to-fit" content-height="scale-to-fit" scaling="uniform"/>
        </fo:block>
    </xsl:template>
</xsl:stylesheet>




and the responsible java part for transformation looks like:

final TransformerFactory tf = TransformerFactory.newInstance();
final DocumentBuilder db = 
DocumentBuilderFactory.newInstance().newDocumentBuilder();
final DOMSource domSource = new DOMSource(db.parse(xmlFile.toFile()));

final InputStream inputStream = resourceLoader.getResource("classpath: 
path/to/file.xsl").getInputStream();
final StreamSource xslt = new StreamSource(inputStream);
final ClasspathUriResolver resolver = new ClasspathUriResolver(resourceLoader);
tf.setURIResolver(resolver);
final Transformer transformer = tf.newTransformer(xslt);

final Resource resource = resourceLoader.getResource("classpath:fop.xconf");
final File configFile = resource.getFile();
final FopConfParser parser = new FopConfParser(configFile);
final FopFactoryBuilder builder = parser.getFopFactoryBuilder();
final FopFactory factory = builder.build();

try (ByteArrayOutputStream outStream = new ByteArrayOutputStream()) {
    final Fop fop = factory.newFop(MimeConstants.MIME_PDF, outStream);
    final Result res = new SAXResult(fop.getDefaultHandler());

    transformer.transform(domSource, res);
} catch(...) {
}


We are getting a java.nio.file.Path-object "xmlFile", manipulating the 
DOMSource befor transforming it into a PDF file. The fop.xconf-file just 
contains fonts-configurations.
So, a little more complex than the examples on xmlgraphics.apache.org, but this 
shouldn't result in an image issue...
The problems start when we started to add the second image using 
<fo:external-graphic ... />

I have no clue what I am doing wrong. Any recommendation|help is welcome.


// Michael 

Reply via email to