Hi Michael,

Can you generate the XSL-FO File? i.e. the result of the XSLT transform? If you then call FOP from the command line instead of via your embedded program do you see the issue? Can you also elaborate what you mean by "occasionally" is that 1 in 100, 1 in 100000?

Thanks,

Chris

On 23/05/2016 18:13, Michael Hansen wrote:
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



---------------------------------------------------------------------
To unsubscribe, e-mail: fop-users-unsubscr...@xmlgraphics.apache.org
For additional commands, e-mail: fop-users-h...@xmlgraphics.apache.org

Reply via email to