在我的.xsl文件中,我使用的是外部图形
<fo:external-graphic width="90pt" height="29pt" src="url(xsl/logo.jpg)"/>
但是生成的PDF中没有加载图像,我在控制台中收到此错误
[ERROR] Error while creating area : Error with image URL: xsl\logo.jpg (The system cannotfind the path specified) and no base URL is specified
如何解决此问题?我想设置基本URL就行了。但是如何设置基本URL?请帮忙。
答案 0 :(得分:3)
我从这个链接得到了解决方案
http://groups.yahoo.com/group/XSL-FO/message/6116
使用Java代码设置基础目录
ServletContext servletContext = getServletConfig().getServletContext();
String appPath = servletContext.getRealPath(""); //root of web app
org.apache.fop.configuration.Configuration.put("baseDir",appPath);
这对我有用。
如果你知道更好的解决方案,请发帖。
答案 1 :(得分:2)
我正在使用Apache FOP 1.1 Ver。
fopFactory = FopFactory.newInstance();
// for image base URL : images from Resource path of project
String serverPath = request.getSession().getServletContext().getRealPath("/");
fopFactory.setBaseURL(serverPath);
// for fonts base URL : .ttf from Resource path of project
fopFactory.getFontManager().setFontBaseURL(serverPath);
我在项目的资源总监中添加了所有图像和所需的字体字体文件。 它对我来说很好。 谢谢
答案 2 :(得分:1)
我遇到了同样的问题,这只适用于fop版本0.95。 版本1.0中忽略SetBaseUrl
答案 3 :(得分:0)
版本1.0,1.1的解决方案: 在fop 1.0和1.1方法中,setBaseURL()无法正确使用本地文件,因此您可以使用方法setURIResolveri并编写接口URIResolver的实现。
1.添加用途 import javax.xml.transform.URIResolver;
2.添加mainClass
private static class LocalResolver implements URIResolver {
private String BaseFolder;
@Override
public Source resolve(String href, String base) throws TransformerException {
File f = new File(BaseFolder + "\\" + href);
if (f.exists())
return new StreamSource(f);
else
throw new TransformerException("File " + f.getAbsolutePath() +" not found!");
}
public LocalResolver(String BaseFolder) {
this.BaseFolder = BaseFolder;
}
}
Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF,out);
3.在调用transformer.transform(src,res)之前添加:
fop.getUserAgent().setURIResolver(new LocalResolver("C:\\Users\\photon\\Downloads\\fop-1.1-bin\\fop-1.1"));