我正在使用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路径中选择该图像文件
非常感谢在这种情况下的任何示例/帮助。 问候
答案 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文件夹中。