BIRT报表一线揭秘2

本文介绍如何使用Java创建报表,并直接在Web浏览器中进行展示的方法。通过编写Servlet实现报表设计、保存及通过WebViewer展示。
收到不少人的邮件咨询我能否直接用JAVA设计报表然后直接展示出来,而非运行导出或者生成一个文件,毕竟生成或者导出的文件不是在服务器端就是要客户浏览器接收,不算友好。其实这并非难事,只需把生成的设计文档放在服务器端然后又直接用webviewer打开便是。代码如下:
  1. import java.io.IOException;  
  2. import javax.servlet.ServletException;  
  3. import javax.servlet.annotation.WebServlet;  
  4. import javax.servlet.http.HttpServlet;  
  5. import javax.servlet.http.HttpServletRequest;  
  6. import javax.servlet.http.HttpServletResponse;  
  7.   
  8. import org.eclipse.birt.core.framework.Platform;  
  9. import org.eclipse.birt.report.model.api.CellHandle;  
  10. import org.eclipse.birt.report.model.api.DesignConfig;  
  11. import org.eclipse.birt.report.model.api.DesignElementHandle;  
  12. import org.eclipse.birt.report.model.api.ElementFactory;  
  13. import org.eclipse.birt.report.model.api.GridHandle;  
  14. import org.eclipse.birt.report.model.api.IDesignEngine;  
  15. import org.eclipse.birt.report.model.api.IDesignEngineFactory;  
  16. import org.eclipse.birt.report.model.api.ImageHandle;  
  17. import org.eclipse.birt.report.model.api.LabelHandle;  
  18. import org.eclipse.birt.report.model.api.ReportDesignHandle;  
  19. import org.eclipse.birt.report.model.api.RowHandle;  
  20. import org.eclipse.birt.report.model.api.SessionHandle;  
  21. import org.eclipse.birt.report.model.api.activity.SemanticException;  
  22.   
  23. import com.ibm.icu.util.ULocale;  
  24.   
  25. @WebServlet("/SimpleCreate")  
  26. public class SimpleCreate extends HttpServlet {  
  27.     private static final long serialVersionUID = 1L;  
  28.   
  29.     public SimpleCreate() {  
  30.         super();  
  31.     }  
  32.   
  33.     protected void doGet(HttpServletRequest request,  
  34.             HttpServletResponse response) throws ServletException, IOException {  
  35.         try  
  36.            {  
  37.                buildReport(request, response);  
  38.            }  
  39.            catch( IOException e )  
  40.            {  
  41.                e.printStackTrace();  
  42.            }  
  43.            catch( SemanticException e )  
  44.            {  
  45.                e.printStackTrace();  
  46.            }  
  47.     }  
  48.   
  49.       
  50.     protected void doPost(HttpServletRequest request,  
  51.             HttpServletResponse response) throws ServletException, IOException {  
  52.         try  
  53.            {  
  54.                buildReport(request, response);  
  55.            }  
  56.            catch( IOException e )  
  57.            {  
  58.                e.printStackTrace();  
  59.            }  
  60.            catch( SemanticException e )  
  61.            {  
  62.                e.printStackTrace();  
  63.            }  
  64.   
  65.     }  
  66.   
  67.     static void buildReport(HttpServletRequest request,  
  68.             HttpServletResponse response) throws IOException, SemanticException {  
  69.         DesignConfig config = new DesignConfig();  
  70.   
  71.         //config.setProperty("BIRT_HOME","D:\\Develop Install Files\\birt-runtime-4_2_1\\ReportEngine");  
  72.         IDesignEngine engine = null;  
  73.         try {  
  74.             Platform.startup(config);  
  75.             IDesignEngineFactory factory = (IDesignEngineFactory) Platform  
  76.                     .createFactoryObject(IDesignEngineFactory.EXTENSION_DESIGN_ENGINE_FACTORY);  
  77.             engine = factory.createDesignEngine(config);  
  78.         } catch (Exception ex) {  
  79.             ex.printStackTrace();  
  80.         }  
  81.   
  82.         SessionHandle session = engine.newSessionHandle(ULocale.ENGLISH);  
  83.         ReportDesignHandle design = session.createDesign();  
  84.         ElementFactory efactory = design.getElementFactory();  
  85.         DesignElementHandle element = efactory  
  86.                 .newSimpleMasterPage("Page Master");  
  87.         design.getMasterPages().add(element);  
  88.         GridHandle grid = efactory.newGridItem(null2 /* cols */1 /* row */);  
  89.         design.getBody().add(grid);  
  90.         grid.setWidth("100%");  
  91.           
  92.         //在行加入一个图片  
  93.         RowHandle row = (RowHandle) grid.getRows().get(0);  
  94.         ImageHandle image = efactory.newImage(null);  
  95.         CellHandle cell = (CellHandle) row.getCells().get(0);  
  96.         cell.getContent().add(image);  
  97.         image.setURL("\"https://img-my.youkuaiyun.com/uploads/201301/09/1357690895_3463.png\"");  
  98.   
  99.         // 产生一个标签  
  100.         LabelHandle label = efactory.newLabel(null);  
  101.         cell = (CellHandle) row.getCells().get(1);  
  102.         cell.getContent().add(label);  
  103.         label.setText("测试,用Java生成报表并用报表展示器展示报表");  
  104.   
  105.         // 保存报表  
  106.         String path=request.getSession().getServletContext().getRealPath("/");  
  107.         System.out.println(path);  
  108.         design.saveAs(path+"/sample.rptdesign");  
  109.         design.close();  
  110.           
  111.         //用报表展示器打开报表  
  112.         String reportpath=request.getContextPath();  
  113.         System.out.println(reportpath);  
  114.         response.sendRedirect(reportpath+"/frameset?__report=sample.rptdesign");          
  115.         System.out.println("Finished");  
  116.     }  
  117.   
  118. }  

关键的是最后几步:

保存报表

String path=request.getSession().getServletContext().getRealPath("/");
design.saveAs(path+"/sample.rptdesign");
展示报表

String reportpath=request.getContextPath();
response.sendRedirect(reportpath+"/frameset?__report=sample.rptdesign");

这个servlet运行并直接生成了一个报表sample.rptdesign,并通过报表展示器查看报表

需要在web.xml中加入如下的配置:

<servlet>

<servlet-name>SimpleCreate</servlet-name>

<servlet-class>birt.SimpleCreate</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>SimpleCreate</servlet-name>

<url-pattern>/SimpleCreate</url-pattern>

</servlet-mapping>

我们把他发布到WebViewerExample工程下,访问http://localhost:8080/WebViewerExample/SimpleCreate,控制台会打印出程序中的输出

D:\apache-tomcat-7.0.33\webapps\WebViewerExample\

/WebViewerExample

Finished

注意地址栏上的地址信息是http://localhost:8080/WebViewerExample/frameset?__report=sample.rptdesign,是因为我们在程序中用的response.sendRedirect()方法。



本课题设计了一种利用Matlab平台开发的植物叶片健康状态识别方案,重点融合了色彩与纹理双重特征以实现对叶片病害的自动化判别。该系统构建了直观的图形操作界面,便于用户提交叶片影像并快速获得分析结论。Matlab作为具备高效数值计算与数据处理能力的工具,在图像分析与模式分类领域应用广泛,本项目正是借助其功能解决农业病害监测的实际问题。 在色彩特征分析方面,叶片影像的颜色分布常与其生理状态密切相关。通常,健康的叶片呈现绿色,而出现黄化、褐变等异常色彩往往指示病害或虫害的发生。Matlab提供了一系列图像处理函数,例如可通过色彩空间转换与直方图统计来量化颜色属性。通过计算各颜色通道的统计参数(如均值、标准差及主成分等),能够提取具有判别力的色彩特征,从而为不同病害类别的区分提供依据。 纹理特征则用于描述叶片表面的微观结构与形态变化,如病斑、皱缩或裂纹等。Matlab中的灰度共生矩阵计算函数可用于提取对比度、均匀性、相关性等纹理指标。此外,局部二值模式与Gabor滤波等方法也能从多尺度刻画纹理细节,进一步增强病害识别的鲁棒性。 系统的人机交互界面基于Matlab的图形用户界面开发环境实现。用户可通过该界面上传待检图像,系统将自动执行图像预处理、特征抽取与分类判断。采用的分类模型包括支持向量机、决策树等机器学习方法,通过对已标注样本的训练,模型能够依据新图像的特征向量预测其所属的病害类别。 此类课题设计有助于深化对Matlab编程、图像处理技术与模式识别原理的理解。通过完整实现从特征提取到分类决策的流程,学生能够将理论知识与实际应用相结合,提升解决复杂工程问题的能力。总体而言,该叶片病害检测系统涵盖了图像分析、特征融合、分类算法及界面开发等多个技术环节,为学习与掌握基于Matlab的智能检测技术提供了综合性实践案例。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值