2

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

项目目录

-src

- 资源

---P2O.xsl

-网页内容

- 图片

---image1.jpg

如果我将 image1.jpg 文件放在 d 中,以下工作正常: drive
fo:external-graphic src='url("file:///d:/image1.jpg")'> /fo:external-graphic>

因为我必须在生产服务器上部署这个应用程序,所以我不能在那里设置这个路径。我的问题是我应该在“src”中指定什么来从 WebContent/images 路径中选择该图像文件

在这种情况下的任何示例/帮助将不胜感激。带着敬意

4

1 回答 1

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 文件夹中。

于 2013-03-01T03:58:55.807 回答