用BIRT开发报表时,可能会引用其余类型的文件,好比JS文件,库文件等,开发时引入这些资源文件时,在报表源文件中是一个相对路径(开发时这个相对路径具体相对于哪一个根目录,须要在BIRT设计器的选项中设置,具体位置在eclipse->window->preferences->report design->resource中设置相对路径的根目录,可是注意这个根路径是全局性的,若是每一个报表相对根路径不一样,则只能手工修改源文件),所以在BIRT的运行时要想正确处理这个相对路径,须要动态的设置一个这个相对路径的根目录,本文将介绍两种设置方法。java
这两种方法都是基于ReportEngine的openReportDesign方法,所以能够针对不一样的报表设置不一样的相对根路径。eclipse
1.IResourceLocator扩展:设计
IReportEngine的openReportDesign方法能够有一个IResourceLocator类型的参数,能够经过实现该接口的findResource方法来动态设置相对目录根路径,BIRT也内置了该接口的实现ResourceLocatorImplBase,该实现较为复杂,有兴趣的能够研究其源代码,而且初步判断该实如今BIRT4.4版本中有Bug,不建议使用。code
2.IModuleOption.RESOURCE_FOLDER_KEY常量:接口
该方法较为简单,以相对根路径为WEB的根目录为例,样例代码以下: ip
IReportEngine birtEngine = ...; Map moduleOptions = new HashMap(); moduleOptions.put(IModuleOption.RESOURCE_FOLDER_KEY,servletContext.getRealPath("/")); IReportRunnable runnable = birtEngine.openReportDesign(reportFileName,null,moduleOptions);