图像未显示在pdf上

时间:2014-07-15 21:27:23

标签: java image jsp pdf-generation xsl-fo

我正在尝试将图像包含到使用Apache Cocoon通过XSL生成的pdf中。我已经阅读了标签<fo:external-graphic>,当图像存储在本地驱动器上或者请求物理上驻留在任何服务器上的图像时,它可以正常工作。但我需要的是在pdf中显示一个由jsp生成的图像(代码栏图像),也就是说java生成图像,它永远不会存储在硬盘上驾驶。

图像由jsp正确生成,因为它在我的浏览器上显示。问题是图像没有显示在pdf中,只有大的空格而不是代码栏图像。

也就是说,这样的东西很好用:

<fo:external-graphic src="http://website.com/codebar.jpg" content-width="3cm" content-height="3cm"></fo:external-graphic>

<fo:external-graphic src="c:\Archivos de Programa\codebar.jpg" content-width="3cm" content-height="3cm"></fo:external-graphic>

但我需要做的是:

<fo:external-graphic src="http://website.com/codebarGenerator.jsp" content-width="3cm" content-height="3cm"></fo:external-graphic>

响应标头设置正确:

response.setContentType("image/jpg"); 

修改

我认为问题可能是,我试图插入html而不是image,这就是pdf不显示图像的原因。但是,如何才能获得http://website.com/codebarGenerator.jsp生成的图像而不将其存储在硬盘中?

1 个答案:

答案 0 :(得分:0)

我也面临与此帖Here相同的问题。我使用URIResolver解决了这个问题。

您也可以尝试:

public class PdfURIResolver implements URIResolver{
@Override
public Source resolve(String href, String base) throws TransformerException {
    Source source = null;       
    try 
    {       
        //Image to InputStream conversion code here,
       //assign that InputStream to 'source' using source = new StreamSource(InputStream );         

    } 
    catch (Exception e) 
    {
        //exception handling
    }
    finally
    {
        //resourse closing if needed.
    }
    return source;
}
}

您必须告诉FOP工厂使用fopFactory.setURIResolver(new PdfURIResolver());

来使用此解析器