Apache FOP:如何使用相对路径设置用于访问外部资源的基本URL

时间:2011-03-24 08:18:12

标签: apache-fop

在我的.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?请帮忙。

4 个答案:

答案 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"));