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

标签 java jar executable-jar apache-fop fatjar

我尝试使用 Apache FOP 2.2 生成 PDF 并遇到一些问题 我正在使用完整的 URI,例如
file:///Users/mac/Desktop/image.png
这是我的模板的一部分。

<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 插件创建 fat Jar 时,我得到了
严重:找不到图像。 URI:文件:///Users/mac/Desktop/image.png。 (没有可用的上下文信息)

为什么我不能在 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 里面!怎么可能?

最佳答案

最后我发现问题出在依赖上。
由于某种原因,如果将 ImagePreloader 作为 fop 的传递依赖项下载,则 xmlgraphics-commons 无法解析 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'
    }

关于java - Apache FOP 无法通过 fatJar 中的 URI 找到外部图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60478360/

相关文章:

java - 如何在 Java 中将 STRING 转换为 VARBINARY?

java - 我如何开发带有应用程序服务器的 Spring Web 应用程序?

scala - 从 Uber Jar 中的资源加载 CSV 文件作为数据框

java - 需要帮助来反编译 jar 文件、编辑类并保存为 jar 文件

java - 如何使用 Java 11 运行已编译的 Java 8 JavaFX 应用程序 jar?

java - Jar 文件 - 防止访问源代码

java - XML - 将节点添加到文本节点的中间

java - 将 Maven mask jar 包含到其他 mask jar 中

java - ELKI 专家光学

java - 需要帮助在 java 中打包可执行文件 .jar