Apache FOP无法通过fatJar中的URI找到外部图像

问题描述 投票:1回答:1

我正在尝试使用Apache FOP 2.2生成PDF,但出现了一些问题我正在使用完整的URI,例如file:///Users/mac/Desktop/image.png。这是myTemplate的一部分。

<fo:block>
      <fo:external-graphic content-height="scale-to-fit"  content-width="46.0mm"scaling="non-uniform"  src="(here I put the upper URI)"/>
</fo:block>`.    
I also got fop_config.xml in resources folder than looks like   
`<fop version="1.0">
    <renderers>
        <renderer mime="application/pdf">
            <auto-detect/>
<fonts>
<---! here are my fonts --->
</fonts>
        </renderer>
    </renderers>
</fop>

和我的脚本

 val fopFactory = FopConfParser(File("fop_config.xml"))
            .fopFactoryBuilder
            .build()
        val foUserAgent = fopFactory.newFOUserAgent()
        val outStream = BufferedOutputStream(FileOutputStream(File("my_pdf.pdf")))
        outStream.use { out ->
            val fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, out)
            val transformer = TransformerFactory.newInstance().newTransformer()
            val src = StreamSource(StringReader(myTemplate))
            val res = SAXResult(fop.defaultHandler)
            transformer.setParameter("versionParam", "2.0")
            transformer.transform(src, res)
        }

我正在使用Kotlin,但这并不重要。我可以通过IDEA很好地渲染,但是当我用shadowJar Gradle插件创建胖罐时,SEVERE: Image not found. URI: file:///Users/mac/Desktop/image.png. (No context info available)

为什么我不能在fatJar中使用URI以及如何解决它?

UPD

我发现我的问题与ImagePreloader有关。例外

org.apache.xmlgraphics.image.loader.ImageException: The file format is not supported. No ImagePreloader found for file:///Users/mac/Desktop/image.png

但是它只是在Jar里面!怎么可能?

java jar executable-jar apache-fop fatjar
1个回答
0
投票

最后我发现问题出在依赖项上。由于某些原因,如果xmlgraphics-commons作为fop的传递依赖项下载,则无法解析ImagePreloader。解决的方法是从:

更改Gradle脚本。
compile('org.apache.xmlgraphics:fop:2.1')

至:

compile('org.apache.xmlgraphics:xmlgraphics-commons:2.1')
    compile('org.apache.xmlgraphics:fop:2.1') {
        exclude group:'org.apache.xmlgraphics', module: 'xmlgraphics-commons'
    }
© www.soinside.com 2019 - 2024. All rights reserved.