BIRT报表一线揭秘2

BIRT报表一线揭秘1 前不久设计了一个很复杂的报表,中间涉及到汇总,又分类,再汇总,外连接,排序,前十等等 用到了63个超复杂sql的数据集,用了260个网格单元格 大部分sql数据集的查询语句如下: select nvl(sum(J3.usdamt),0)   J3usdamt              from (select a.custno,                          su 阅读详情
收到不少人的邮件咨询我能否直接用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(null, 2 /* 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()方法。



从虚拟机到双系统:手把手教你为Gromacs搭建最强Linux环境(含WSL2、Ubuntu22.04配置) 本文详细指导如何在Windows系统下为Gromacs分子动力学模拟搭建高性能Linux环境,涵盖WSL2和Ubuntu22.04双系统配置。通过对比虚拟机、WSL2和原生Linux的性能数据,提供GPU加速、内存优化等实用技巧,帮助科研人员提升计算效率。 阅读详情

相关推荐

STM32通过ESP8266连接机智云APP(第二讲,烧录固件并测试)

今天与大家分享STM32通过ESP8266连接机智云APP,并完成数据的上传下发第二讲。带大家一起烧录机智云固件到ESP8266并且将其通过机智云串口助手与APP进行测试。

qq_63267523的博客 1425

免费报表工具知多少?

说到免费,就会想到开源。没错,开源报表产品都是免费的,那么都有哪些活跃的开源报表产品呢? BIRT BIRT 是为 Web 应用程序开发的基于 Eclipse 的开源报表系统,可以以 JAR 包形式集成到系统中。BIRT 提供基于 Eclipse 的报表设计器,采用控件式开发方式,上手略有困难。 从功能来看,BIRT 仅支持相对简单的报表,不支持中国复杂报表,而这类报表国内几乎所有项目都会涉及。各种打印功能(批量打印、套打、直接打印)BIRT 支持的也不好。 因此 BIRT 仅适合少量没有复杂报表,

FM78_优快云的博客 630

EEGLAB安装、EDF数据导入、EEG预处理(Matlab)

目录下载和安装下载安装遇到问题及解决方案导入EDF数据EEG预处理 下载和安装 下载 链接:https://pan.baidu.com/s/17eMT6B7LgZ4PyqWvD5ixmg 提取码:12gz 安装 **第一步:**将下载下来的文件解压,修改名称为eeglab,将此文件夹存放在matlab的安装目录里的toolbox文件夹下,下图是我的路径,需要拷贝到自己相对应的路径中 第二步: 打开Matlab软件,点击主页中的设置路径 设置路径 点击添加并包含子文件夹,将eeglab文件夹添加进来,保

y18771025420的博客 1万+

汇总数据集BIRT报表一线揭秘1

PS:今天上午,非常郁闷,有很多简单基础的问题搞得我有些迷茫,哎,代码几天不写就忘。目前又不当COO,还是得用心记代码哦!     前不久计划了一个很杂复的报表,旁边涉及到汇总,又分类,再汇总,外连接,序排,前十等等     用到了63个超杂复sql的数据集,用了260个网格单元格     大部分sql数据集的查询语句如下:      select nvl(sum(J3.usdamt...

weixin_33724059的博客 183

用MFRC522+STM32打造智能门禁:从硬件选型到云端控制全流程

本文详细介绍了基于STM32微控制器和MFRC522射频模块构建智能门禁系统的完整流程。从硬件选型、电路设计、底层驱动开发,到系统软件架构与状态机设计,并最终实现通过ESP8266模块接入云端平台(如OneNET)进行远程控制和数据可视化。项目深入探讨了MFRC522的SPI通信、卡片操作流程、天线调试以及云端MQTT集成等关键技术,为嵌入式开发者提供了一个从本地感知到云端管控的物联网项目实战参考。

raspberrypi5的博客 741

Yolov8-pose关键点检测:训练实战篇 | 手部关键点检测

yolo8-pose实战检测手部关键点并优化。

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 3396

Birt使用技巧

1. 线图图例移动方法 线图图例默认的样式是在图的右边,要将其移动到图的下方,使用的操作如下: 在birt视图下,双击图片选择FormatChart ,点击左侧legend, 点击layout按钮,出现参数选择框: Orientation选择Vertical;Position 选择Below ; stretch 选择 Horizontal ; Direction 选择 Leftright...

yangyiqian的专栏 662

128、点云配准与ICP:经典配准算法与深度学习配准

上周调试一台双臂协作机器人,左手持结构光相机扫描桌面上的随机堆叠工件,右手准备执行抓取。问题出在“对齐”这一步——相机扫描得到的点云和CAD模型点云之间差了大约15度的旋转,导致抓取姿态计算出来直接怼到桌面上。我第一反应是“ICP跑一下不就行了”,结果跑了三分钟,误差纹丝不动,甚至越迭代越发散。后来查了日志才发现,初始位姿给得太离谱,ICP直接掉进了局部最优。这个场景太典型了——很多人以为点云配准就是调个ICP库函数,实际工程里坑比想象中多得多。今天这篇笔记,咱们把点云配准这件事从头捋一遍。

sundong_81的博客 42

报表工具价格

我们在实际项目中选择报表工具时,除了关心功能是否能够满足需求,也会非常关心产品价格,即报表工具在项目中的应用成本,包括购买工具的花费和投入的人力成本,也就是我们经常提到的“性价比”。面对琳琅满目的报表工具以及厂商包装出来各种“高大上”的功能,想要“选对”,而不“选贵”有时并不容易。那么,如何选择适合的报表工具既能满足项目需要,又能有效控制项目成本,达到高性价比呢?这里我们来谈谈如何根据不同的项目情况选择不同成本的报表工具。 《国内十大活跃报表 BI 产品深度点评》一文中仔细点评了当前业界几款重点报表 BI

qq_40600249的博客 707

【RT-DETR涨点改进】全网独家创新、细节涨点改进篇 | ICML 2024 | RT-DETR引入ICB交互式卷积模块和ASB自适应频谱模块,助力目标检测、异常检测有效涨点、含多种创新改进点

RT-DETR目标检测模型通过引入ICB和ASB模块实现性能提升。ICB模块采用多尺度卷积交互,有效捕获局部和长程依赖特征;ASB模块通过自适应频域滤波优化特征表示,降低噪声干扰。两者结合使模型在复杂场景中表现更优,显著提升检测精度和鲁棒性。文章详细介绍了模块原理、代码实现及配置方法,并提供了8种改进版本的YAML配置文件,适用于不同网络结构。这些创新改进为RT-DETR模型提供了高效涨点方案,特别适合复杂背景和高噪声环境下的目标检测任务。

Ai缝合怪、助力小伙伴高效发论文 213

小米汽车车载多摄像头视频链路深度解析 | MAX96792/MAX96724/MAX96781 实战分享

通过合理的输入输出规划 + 虚拟通道管理 + 加串行策略,可以在成本和性能之间取得最佳平衡,这就是多摄像头系统设计的核心精髓。

weixin_43199439的博客 1547

报表工具价格谁最优?

我们在实际项目中选择报表工具时,除了关心功能是否能够满足需求,也会非常关心产品价格,即报表工具在项目中的应用成本,包括购买工具的花费和投入的人力成本,也就是我们经常提到的“性价比”。面对琳琅满目的报表工具以及厂商包装出来各种“高大上”的功能,想要“选对”,而不“选贵”有时并不容易。那么,如何选择适合的报表工具既能满足项目需要,又能有效控制项目成本,达到高性价比呢?这里我们来谈谈如何根据不同的项目情况选择不同成本的报表工具。 《国内十大活跃报表 BI 产品深度点评》一文中仔细点评了当前业界几款重点报表 BI

cainiao_M的博客 1168

【异常检测】新版异常检测库anomalib的使用

异常检测库anomalib的使用。

胡侃有料的博客 4390

如何选择高性价比的报表工具

我们在实际项目中选择报表工具时,除了关心功能是否能够满足需求,也会非常关心产品价格,即报表工具在项目中的应用成本,包括购买工具的花费和投入的人力成本,也就是我们经常提到的“性价比”。面对琳琅满目的报表工具以及厂商包装出来各种“高大上”的功能,想要“选对”,而不“选贵”有时并不容易。那么,如何选择适合的报表工具既能满足项目需要,又能有效控制项目成本,达到高性价比呢?这里我们来谈谈如何根据不同的项目情况选择不同成本的报表工具。 《国内十大活跃报表 BI 产品深度点评》一文中仔细点评了当前业界几款重点报表 BI

xiaohuihui_1992的博客 606

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

上一篇: BIRT报表一线揭秘1
下一篇: birt报表用rptlibrary统一所有报表的数据源
freedom1993
博客等级 码龄12年 25粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值