使用OutputStream在FOP中渲染图像

时间:2014-07-01 13:45:31

标签: java xsl-fo apache-fop

我想在PDF上渲染图像,这将由FOP生成。要呈现图片,我使用标记<fo:external-graphic>如下所示:

<fo:external-graphic src="url('../offlinePaper/displayImage?disImg=4bec89f0-5b97-40c3-b7c9-ac555a664df8')" inline-progression-dimension.maximum="100%"  content-height="scale-down-to-fit" content-width="scale-down-to-fit"> </fo:external-graphic>

我还尝试将完整的URL设为:

<fo:external-graphic src="http://10.2.10.79/Web/offlinePaper/displayImage?disImg=e391d672-ebf4-44d8-86cb-2cf987a50bf7" inline-progression-dimension.maximum="100%"  content-height="scale-down-to-fit" content-width="scale-down-to-fit"> </fo:external-graphic>

在控制器中,我有一个请求映射(../offlinePaper/displayImage),它从disImg获取图像名称getParameter并解密图像并返回OutputStream

但是当我生成PDF时,我发现日志文件中的错误为:

Image not available. URI: http://10.2.10.79:80/Web/offlinePaper/displayImage?disImg=4bec89f0-5b97-40c3-b7c9-ac555a664df8. Reason: org.apache.xmlgraphics.image.loader.ImageException: The file format is not supported. No ImagePreloader found for http://10.2.10.79:80/Web/offlinePaper/displayImage?disImg=4bec89f0-5b97-40c3-b7c9-ac555a664df8 (No context info available)

但是,如果我复制此URL并粘贴到URL中,那么图像将显示在浏览器中,并且我还发现,当我生成PDF时,请求映射(假设要调用图像解密)不会被调用。

更新

同样奇怪的是我认识到,如果网络服务器是Tomcat,但是如果我在Glassfish上部署应用程序,则使用相同的代码PDF会成功生成给出错误。

1 个答案:

答案 0 :(得分:0)

在异常跟踪中:

  

ImageException:不支持文件格式

根据文件扩展名,FO似乎能够找到ImagePreloader。如果它找不到,它会中断。

我建议改变网址的构建方式。应该包含一个真实的图像文件名。

所以,而不是:

  

../ offlinePaper / displayImage?disImg = 4bec89f0-5b97-40c3-b7c9-ac555a664df8

  

../ offlinePaper / displayImage / disImg4bec89f0-5b97-40c3-b7c9-ac555a664df8.jpg