<fo:flow flow-name="xsl-region-body">
<fo:block>
<fo:external-graphic width="85pt" height="35pt" src="url(D:\WebSphere\AppServer\installedApps\ISLVPHP01G0\gcb_retail_appl2.ear\fcat27Web.war\images\eng\<image-name>.gif)"/>
</fo:block>
... ....
OutputStream l_op_stream = null;
byte [] l_byte = null;
InputStream l_in_stream = null;
p_response.setHeader ("Cache-Control", "max-age=0"); //HttpServletResponse p_response object
p_response.setHeader ("Cache-Control", "no-cache, no-store, must-revalidate");
p_response.setHeader ("Pragma", "no-cache");
p_response.setDateHeader("Expires", 0);
p_response.setHeader (
"Content-Disposition", "attachment; filename=\""
+ p_attchFname + "\""
);
.... ....
FOProcessor l_processor = new FOProcessor();
ByteArrayOutputStream l_bos_temp = null;
l_processor.setOutputFormat (
FOProcessor.FORMAT_PDF
);
l_processor.setData (
new ByteArrayInputStream (
p_data.response.getBytes(xslEncoding)
)
);
l_processor.setTemplate (
l_in_stream
);
l_bos_temp = new ByteArrayOutputStream ();
l_processor.setOutput (l_bos_temp); //set output file
l_processor.generate ();
我正在使用XSLT / XSL-FO作为我的应用程序的UI部分。我有一个.xsl
文件,其中包含图像的绝对路径,以显示徽标徽标,如<fo:external-graphic>
中的代码所示。我想用图像的相对路径替换绝对路径。
我已在上面显示了java中的UI代码和服务器端代码。
我想在标签中的'src'标签中给出相对路径而不是绝对路径。
请建议我这样做。
答案 0 :(得分:0)
我不熟悉您的特定FO处理器,但通常您可以通过实施自定义URIResolver
来实现此目的。例如,使用Apache FOP:
FOUserAgent fop = FopFactory.newInstance().newFOUserAgent();
fop.setURIResolver(new MyURIResolver());
MyURIResolver
类似于:
public class MyURIResolver implements URIResolver {
public Source resolve(String href, String base) throws TransformerException {
InputStream is;
//TODO get InputStream from file system, database, etc. based on href
return new StreamSource(is);
}
}
无论您在url()
src
属性fo:external-graphic
中传递给URIResolver
,无论是相对还是绝对,都会通过href
参数传递给{{1}} ,允许您按照自己的意愿解决问题。