當我做完使用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
          主站蜘蛛池模板: 拜城县| 双牌县| 威远县| 天祝| 曲靖市| 彭泽县| 临西县| 章丘市| 横山县| 大兴区| 东平县| 盈江县| 青冈县| 婺源县| 寻乌县| 夏津县| 海丰县| 怀集县| 郧西县| 鹰潭市| 花莲市| 八宿县| 三台县| 鹤峰县| 普兰店市| 宜君县| 神农架林区| 武夷山市| 连南| 阳西县| 新民市| 井研县| 河津市| 惠水县| 翼城县| 云霄县| 北流市| 雷山县| 天气| 崇文区| 太湖县|