Я пытаюсь сгенерировать PDF с Apache FOP 2.2 и у меня возникли проблемы. Я использую полный 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, но когда я создаю толстый Jar с плагином shadowJar Gradle, у меня появляется
SEVERE: Image not found. URI: file:///Users/mac/Desktop/image.png. (No context info available)
Почему я не могу использовать URI внутри fatJar и как я могу это исправить ?
UPD
Я обнаружил, что моя проблема связана с ImagePreloader. исключение
org.apache.xmlgraphics.image.loader.ImageException: The file format is not supported. No ImagePreloader found for file:///Users/mac/Desktop/image.png
Но это только внутри банки! Как это может быть?