在XSL中为外部图形指定Src

时间:2013-02-28 07:03:28

标签: image xslt pdf relative-path

我正在使用JSF1.2框架并使用FOP引擎和XSL样式表将XML转换为PDF。就字符串数据而言,它的工作完美但现在我想在我的输出PDF中嵌入图像。目录结构如下

ProjectDirectory

-src

- 资源

--- P2O.xsl

-WebContent

- 图像

--- image1.jpg

如果我将image1.jpg文件放在d:驱动器中,以下工作正常 fo:external-graphic src ='url(“file:/// d:/image1.jpg”)'> / FO:外部图形>

由于我必须在生产服务器上部署此应用程序,因此我无法在此处设置此路径。我的问题是我应该在“src”中指定从WebContent / images路径中选择该图像文件

非常感谢在这种情况下的任何示例/帮助。 问候

1 个答案:

答案 0 :(得分:1)

经过短暂的搜索,我发现了问题。考虑的主要问题是FOUserAgent,它作为应用程序和FOP处理器之间的中介。除非明确定义,否则FOP处理器不知道应用程序的根路径或基本路径。要为映像使用相对路径,需要创建FOUserAgent对象并指定该FOUserAgent实例的基本URL。就我而言,我添加了以下行(如下所示):

FopFactory fopFactory = FopFactory.newInstance();

FOUserAgent foUserAgent = fopFactory.newFOUserAgent();

// This is the important line
foUserAgent.setBaseURL("file:///" + FacesUtils.getHttpServletRequest().getRealPath("/"));

Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, outputStream);

其中FacesUtils只是我保留在项目中的自定义utils文件。如果您没有任何utils文件,那么只需使用FacesContext即可获得realPath()

现在,basePath将引用您的WebContent文件夹,并且可以从那里相对访问任何图像。我现在在.xsl:

中访问我的图像
src='url("images/image1.jpg")'

其中images文件夹位于WebContent文件夹中。