FOP 无法从 url 加载图像

Posted

技术标签:

【中文标题】FOP 无法从 url 加载图像【英文标题】:FOP fails to load image from url 【发布时间】:2020-05-13 20:24:07 【问题描述】:

我有一个返回图像的 web api。我正在尝试将其集成到我的 FO 模板中。

<fo:block font-weight="normal" text-align="left">
     <fo:external-graphic src="url($URL)">
     </fo:external-graphic>
</fo:block>

其中 $URL 是“http://servername/images/id”。

我收到以下错误:

HTTP 状态 500 - 内部服务器错误类型异常报告

消息 Servlet 执行引发异常

描述 服务器遇到了一个意外情况 阻止它完成请求。

例外

javax.servlet.ServletException: Servlet 执行抛出异常 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 根本原因

java.lang.NoClassDefFoundError: com/sun/media/jai/codec/FileCacheSeekableStream

我可以使用 http://servername/images/id url 直接访问图像,因此 url 是正确的。

【问题讨论】:

重要的一行是最后一行:您缺少 JAI(Java 高级成像)jar。您必须下载它并将其放入(或链接)到lib 文件夹中。 谢谢,刚刚发布了问题的根本原因。 从其他人的问题也没有回答,看起来 JAI 安装和 JDK/JRE 文件夹有问题。 【参考方案1】:

根本原因是 FOP 无法为 PDF 文件加载 PNG 图像。它适用于 JPEG/BMP/GIF。

https://xmlgraphics.apache.org/fop/2.0/graphics.html

【讨论】:

这不是文档所说的:“PNG 图像通过 Image I/O 编解码器 (ImageLoaderImageIO) 和本机支持都得到支持。PDF 和 PS 输出可以支持 FOP 本机支持,并且可以通过内部编解码器 (ImageLoaderPNG) 或直接处理未解码的图像 (ImageLoaderRawPNG) 启用。更多信息可在 wiki 页面中找到。支持透明度,但不保证适用于每种输出格式。"

以上是关于FOP 无法从 url 加载图像的主要内容,如果未能解决你的问题,请参考以下文章

Kivy 无法从外部 URL 加载图像

angular 2组件无法从外部css皮肤加载相对背景图像url

Django静态图像文件无法加载资源

Nextjs:无法从静态文件夹加载图像

ImageView 加载本地图像,但不从 URL

无法从 URL 获取图像? (NSURLErrorDomain 错误 -1100)