當我做完使用API Servlet部署能夠接受參數以后 發現一個新的問題又來了,就是在報表中生成的圖片和chart都是以鏈接本地地址存在的,那要是放在服務器上,別的機子訪問時會出現圖片不可用的問題。經過查一系列資料終于把問題解決了。具體原理是什么其實我也不太了解,BIRT的API我還是沒怎么好好讀,先把代碼貼到這里再說吧,具體用的方式前面已經寫過一個詳細的文檔了。
            1 package cn.com.maxtech.fileupload;
            2 
            3 import java.io.IOException;
            4 import java.util.Enumeration;
            5 import java.util.HashMap;
            6 import java.util.Map;
            7 import java.util.logging.Level;
            8 import java.util.logging.Logger;
            9 
           10 import javax.servlet.ServletContext;
           11 import javax.servlet.ServletException;
           12 import javax.servlet.http.HttpServlet;
           13 import javax.servlet.http.HttpServletRequest;
           14 import javax.servlet.http.HttpServletResponse;
           15 
           16 
           17 import org.eclipse.birt.report.engine.api.EngineConstants;
           18 
           19 import org.eclipse.birt.report.engine.api.HTMLRenderContext;
           20 import org.eclipse.birt.report.engine.api.HTMLRenderOption;
           21 
           22 import org.eclipse.birt.report.engine.api.EngineConfig;
           23 import org.eclipse.birt.report.engine.api.HTMLActionHandler;
           24 import org.eclipse.birt.report.engine.api.HTMLEmitterConfig;
           25 import org.eclipse.birt.report.engine.api.HTMLServerImageHandler;
           26 import org.eclipse.birt.report.engine.api.IReportEngine;
           27 import org.eclipse.birt.report.engine.api.IReportRunnable;
           28 import org.eclipse.birt.report.engine.api.IRunAndRenderTask;
           29   
           30 
           31 public class WebReport extends HttpServlet {
           32 
           33 /**
           34  * 
           35  */
           36 private static final long serialVersionUID = 1L;
           37 /**
           38  * Constructor of the object.
           39  */
           40 private IReportEngine birtReportEngine = null;
           41 protected static Logger logger = Logger.getLogger( "org.eclipse.birt" );
           42 
           43 public WebReport() {
           44  super();
           45 }
           46 
           47 /**
           48  * Destruction of the servlet. 
           49  */
           50 public void destroy() {
           51  super.destroy(); 
           52  BirtEngine.destroyBirtEngine();
           53 }
           54 
           55 
           56 /**
           57  * The doGet method of the servlet. 
           58  *
           59  */
           60 public void doGet(HttpServletRequest req, HttpServletResponse resp)
           61   throws ServletException, IOException {
           62     
           63   Map m = new HashMap();
           64   Enumeration names = req.getParameterNames();
           65   while (names.hasMoreElements()) {
           66       String name =(String)names.nextElement();
           67       String value = req.getParameter(name);
           68       if (name.trim().equals("ReportName"|| name.trim().equals("action"|| value == null || value.trim().equals("")) {
           69           
           70       } else {
           71           m.put(name, value);
           72           System.out.print(name + "--->");
           73           System.out.println(m.get(name));
           74       }
           75       
           76   }
           77   
           78   ServletContext sc = req.getSession().getServletContext();
           79   
           80   this.birtReportEngine = BirtEngine.getBirtEngine(sc);
           81   EngineConfig config = birtReportEngine.getConfig();
           82   HTMLEmitterConfig emitterConfig = new HTMLEmitterConfig( );   
           83   emitterConfig.setActionHandler( new HTMLActionHandler( ) );   
           84   HTMLServerImageHandler imageHandler = new HTMLServerImageHandler( );   
           85   emitterConfig.setImageHandler( imageHandler ); 
           86   
           87   config.getEmitterConfigs( ).put( "html", emitterConfig );
           88   
           89   
           90  resp.setContentType("text/html");
           91  //resp.setContentType( "application/pdf" ); 
           92  //resp.setHeader ("Content-Disposition","inline; filename=test.pdf");  
           93  String reportPath = req.getParameter("reportPath");
           94  String reportName = req.getParameter("ReportName");
           95 
           96  
           97  //setup image directory
           98  HTMLRenderContext renderContext = new HTMLRenderContext();
           99  renderContext.setBaseImageURL(req.getContextPath()+"/images");
          100  renderContext.setImageDirectory(sc.getRealPath("/images"));
          101  
          102  renderContext.setSupportedImageFormats("JPG;PNG;BMP;SVG"); 
          103  
          104  logger.log( Level.FINE, "image directory " + sc.getRealPath("/images"));  
          105  System.out.println("stdout image directory " + sc.getRealPath("/images"));
          106  System.out.println("stdout image directory " + renderContext.getBaseImageURL());
          107  
          108  HashMap<String, HTMLRenderContext> contextMap = new HashMap<String, HTMLRenderContext>();
          109  contextMap.put( EngineConstants.APPCONTEXT_HTML_RENDER_CONTEXT, renderContext );
          110  
          111  IReportRunnable design;
          112  try
          113  {
          114   //Open report design
          115   design = birtReportEngine.openReportDesign( sc.getRealPath("/upload/baobiao/" + reportPath)+"/"+reportName );
          116   //create task to run and render report
          117   IRunAndRenderTask task = birtReportEngine.createRunAndRenderTask( design );  
          118   task.setAppContext( contextMap );
          119   
          120   //set output options
          121   HTMLRenderOption options = new HTMLRenderOption();
          122   options.setOutputFormat(HTMLRenderOption.OUTPUT_FORMAT_HTML);
          123   //options.setOutputFormat(HTMLRenderOption.OUTPUT_FORMAT_PDF);
          124   options.setOutputStream(resp.getOutputStream());
          125   task.setRenderOption(options);
          126   
          127   //run report
          128   task.setParameterValues(m);
          129   task.run();
          130   task.close();
          131  }catch (Exception e){
          132   
          133   e.printStackTrace();
          134   throw new ServletException( e );
          135  }
          136 }
          137 
          138 /**
          139  * The doPost method of the servlet. 
          140  *
          141  */
          142 public void doPost(HttpServletRequest request, HttpServletResponse response)
          143   throws ServletException, IOException {
          144 
          145  this.doGet(request, response);
          146 }
          147 
          148 /**
          149  * Initialization of the servlet. 
          150  *
          151  * @throws ServletException if an error occure
          152  */
          153 public void init() throws ServletException {
          154     
          155     BirtEngine.initBirtConfig();
          156  
          157 }
          158 
          159 }
          160 


          posted on 2008-06-18 23:51 leweslove 閱讀(1141) 評論(0)  編輯  收藏 所屬分類: Other

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          Copyright@2008-2009 By Evan
          主站蜘蛛池模板: 德州市| 罗源县| 安溪县| 南丹县| 甘洛县| 平湖市| 龙门县| 昌江| 宝应县| 竹溪县| 罗定市| 湛江市| 株洲县| 江口县| 赤水市| 新丰县| 金华市| 农安县| 清河县| 弥渡县| 繁昌县| 甘德县| 贵溪市| 河津市| 乌什县| 庆元县| 景东| 确山县| 旬邑县| 勃利县| 汝南县| 洛扎县| 繁峙县| 平阳县| 古丈县| 资阳市| 贺兰县| 寻甸| 安西县| 阿勒泰市| 五大连池市|