为什么80%的码农都做不了架构师?>>>   hot3.png

birt报表部署方式有两种,一种是通过官方提供的WebViewerExample webapp去部署

另一种是通过ReportEngine API自行开发部署程序;

采用第一种的好处是不需要编写额外的代码,直接就能部署,比较方便,但是限制很多

如果采用第二种的话就很灵活了。

本日志主要记录采用ReportEngine API来进行报表的部署;

编码前准备:

下载birt-runtime-version.zip(www.eclipse.org有下载)

解压,其中ReportEngine目录存放着所有所需的东西

准备数据库驱动

编写birt报表文件

利用下边的代码就可以执行报表文件并生成目标html文件

package report;import java.util.HashMap;import java.util.logging.Level;import org.eclipse.birt.core.framework.Platform;import org.eclipse.birt.report.engine.api.EngineConfig;import org.eclipse.birt.report.engine.api.EngineConstants;import org.eclipse.birt.report.engine.api.EngineException;import org.eclipse.birt.report.engine.api.HTMLActionHandler;import org.eclipse.birt.report.engine.api.HTMLEmitterConfig;import org.eclipse.birt.report.engine.api.HTMLRenderContext;import org.eclipse.birt.report.engine.api.HTMLRenderOption;import org.eclipse.birt.report.engine.api.HTMLServerImageHandler;import org.eclipse.birt.report.engine.api.IReportEngine;import org.eclipse.birt.report.engine.api.IReportEngineFactory;import org.eclipse.birt.report.engine.api.IReportRunnable;import org.eclipse.birt.report.engine.api.IRunAndRenderTask;public class ExecuteReport {static void executeReport() throws EngineException {HashMap<String, String> parameters = new HashMap<String, String>();//报表的参数名称String name = "byCondition";//报表的参数值,将来可以做个jsp传进来String pvalue = "3";//封装成mapparameters.put(name, pvalue);IReportEngine engine = null;EngineConfig config = null;try {// 设置Engine并且启动报表平台config = new EngineConfig();config.setEngineHome("E:/TDDOWNLOAD/birt-runtime-2_6_1/birt-runtime-2_6_1/ReportEngine");// 设置报表日志保存的位置和等级( null, Level ) 如果你不需要日志可以设置为nullconfig.setLogConfig("d:/birt/logs", Level.FINE);// 平台初始化,启用Platform.startup(config);IReportEngineFactory factory = (IReportEngineFactory) Platform.createFactoryObject(IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY);engine = factory.createReportEngine(config);engine.changeLogLevel(Level.WARNING);} catch (Exception ex) {ex.printStackTrace();}// 设置发起者的一些操作,比如显示图片,报表生成到html页面,很关键的部分HTMLEmitterConfig emitterConfig = new HTMLEmitterConfig();emitterConfig.setActionHandler(new HTMLActionHandler());HTMLServerImageHandler imageHandler = new HTMLServerImageHandler();emitterConfig.setImageHandler(imageHandler);config.getEmitterConfigs().put("html", emitterConfig); //$NON-NLS-1$  IReportRunnable design = null;// 打开设计好的报表,取绝对路径,最好使用context.getRealPath();这种方法实现,官方这个比较呆design = engine.openReportDesign("D:/Java/eclipse/workspace/TestReport/WebContent/change_bettiems.rptdesign");// 创建报表任务IRunAndRenderTask task = engine.createRunAndRenderTask(design);//       // 设置报表的路径和图片显示的路径//        HTMLRenderContext renderContext = new HTMLRenderContext();//        // 为所有的actions设置Base URL,这个不写就是默认服务器URL的//       renderContext.setBaseURL("http://localhost/");//        // 设置所有图片显示的URL - 如果之前没有emitterConfig.setImageHandler( imageHandler//       // );的话会造成显示的URL是本地的绝对路径,其实http://localhost不写也是可以的,会自动添加服务器的URL//     renderContext.setBaseImageURL("http://localhost/myimages");//       // 设置所有图片存放的位置,最好使用context.getRealPath();//      renderContext.setImageDirectory("C:/xampplite/htdocs/myimages");//      // 设置图片支持的格式,据官方说必须有SVG,我没写也没出错//     renderContext.setSupportedImageFormats("JPG;PNG;BMP;SVG");//        HashMap<String, HTMLRenderContext> contextMap = new HashMap<String, HTMLRenderContext>();//     contextMap.put(EngineConstants.APPCONTEXT_HTML_RENDER_CONTEXT,//                renderContext);//       task.setAppContext(contextMap);// 设置参数task.setParameterValues(parameters);// 要所有的参数一条一条的写入,例如: task.setParameterValue("Top Count", new// Integer(12));task.validateParameters();// 增加scrpit参考下面的例子// pFilter.myjavamethod()// ProcessFilter pf = new ProcessFilter();// task.addScriptableJavaObject("pFilter", pf);// 设置rendering操作- 例如file or stream output, output format, whether it is// embeddable, etcHTMLRenderOption options = new HTMLRenderOption();// 例如:Remove HTML and Body tags// options.setEmbeddable(true);// 设置输出本地文件options.setOutputFileName("C:/test/2.1/output.html");// 设置输出文件格式options.setOutputFormat("html");task.setRenderOption(options);// 运行report任务,然后关闭// 如果要长期留驻的话可以不关闭,我建议不关闭engine和Platform,要不每次打开报表都要等好久……task.run();task.close();engine.shutdown();Platform.shutdown();System.out.println("Finished");}/*** @param args*/public static void main(String[] args) {try {executeReport();} catch (Exception e) {e.printStackTrace();}}}

转载于:https://my.oschina.net/kzhou/blog/9172

利用BIRT ReportEngine API开发报表相关推荐

  1. 利用WordPress REST API 开发微信小程序从入门到放弃

    自从我发布并开源WordPress版微信小程序以来,很多WordPress网站的站长问有关程序开发的问题,其实在文章:<用微信小程序连接WordPress网站>讲述过一些基本的要点,不过仍 ...

  2. 十三、BIRT报表引擎API及报表API

    13.1报表引擎详解,API结构 BIRT包含几个引擎.一个引擎是一个提供一个特定领域的功能的一套Java API.例如,数据引擎包含管理数据的API,图表引擎包含生成一个图表的API.一般而言,BI ...

  3. 报表引擎API开发入门— EJB程序数据源

    2019独角兽企业重金招聘Python工程师标准>>> 我们前面讲了几个数据源,今天我们来讲一下EJB数据源,这篇讲完我们数据源这部分就讲完了.数据连接不需要直接访问数据库,而是使用 ...

  4. python有道翻译接口-【Python】Python利用有道翻译开发API应用示例

    Python源码是关于Python利用有道翻译开发API应用示例.这是一个很有意思又简单的API应用练习题,方法中用到了有道词典开放API应用,合成的类似于命令行词典应用Python小程序.功能简单, ...

  5. python有道字典_【Python】Python利用有道翻译开发API应用示例

    Python源码是关于Python利用有道翻译开发API应用示例.这是一个很有意思又简单的API应用练习题,方法中用到了有道词典开放API应用,合成的类似于命令行词典应用Python小程序.功能简单, ...

  6. 如何利用TAM的API进行应用的开发

    在下面的文章中,我们会介绍应用如何利用IBM Tivoli Access Manager(以下简称TAM)作为用户认证和授权控制的平台,最为高效地把TAM和应用开发集成起来,从而为应用的开发.部署和运 ...

  7. 利用Siri API开发的语音输入法Air Dictate出现

    中文资讯-LEADJOY: 拥有iPhone 4S和Mac电脑的朋友们现在可以尝试全新的输入方法Air Dictate,这是一款运用Siri API开发出来的应用,开发方Avatron找到一种方法来控 ...

  8. 技术图文:如何利用BigOne的API制作自动化交易系统 -- 订单系统

    背景 前面几天,我们一起封装了 BigONE 提供的"身份验证"与"资产账户"部分的 API. 如何利用BigOne的API制作自动化交易系统 – 身份验证 如 ...

  9. 技术图文:如何利用BigOne的API制作自动化交易系统 -- 获取账户资产

    背景 前几天我们介绍了如何使用 BigONE Developer API V2 来获取身份令牌的方法「如何利用BigOne的API制作自动化交易系统 – 身份验证」.一旦获取了身份令牌,我们就可以在网 ...

  10. python批量爬取小网格区域坐标系_Python爬虫实例_利用百度地图API批量获取城市所有的POI点...

    上篇关于爬虫的文章,我们讲解了如何运用Python的requests及BeautifuiSoup模块来完成静态网页的爬取,总结过程,网页爬虫本质就两步: 1.设置请求参数(url,headers,co ...

最新文章

  1. SAP QM 物料主数据QM视图里字段MARC-INSMK的更新
  2. 一名大神的github
  3. Angular 运行报错 RouterModule.forRoot() called twice.
  4. 使用ZeroClipboard解决跨浏览器复制到剪贴板的问题
  5. python读取文件r_python 文件读写模式r,r+,w,w+,a,a+的区别(附代码示例)
  6. Git 中 SSH key 生成步骤
  7. Things That Cannot Change
  8. Chrome API操作串口
  9. angular.js国际化模块
  10. 使用JUnit对ADF应用程序进行单元测试
  11. 计算机基础应用的培养活动记录,计算机应用基础综合实训
  12. python前后两个下划线_Python中一个下划线_和两个下划线__的区别
  13. coursera 视频总是缓冲或者无法观看,有什么方法解决?
  14. javax.persistence.TransactionRequiredException: Executing an update/delete query
  15. Linux 命令汇总!【珍藏版】
  16. Electron入门——代码压缩与打包exe文件
  17. ios兼容iphonex刘海屏解决方案
  18. vivo NEX3史上最强旗舰机!瀑布屏+骁龙855+44W+5G,对战华为
  19. 引入思考的电影电视动漫(二)
  20. 小米弹性调度平台Ocean

热门文章

  1. 使用代码把一个目录打包成jar
  2. LINUX下Android NDK下载并配置
  3. 列车座位应考虑向后摆放
  4. 不想听别人的建议,就不要问
  5. 买手机数据线特别要注意的地方
  6. 对 /etc/rc.d/init.d 目录的一点理解
  7. python代码_Python发送邮件基础知识与代码讲解!
  8. hiveserver2启动不起来_125踏板车电启动发不着时,为什么很少用户使用脚启动?...
  9. tx2开发板接口详解_Linux CAN编程详解
  10. anaconda和pythoncharm_Anaconda、TensorFlow安装和Pycharm配置详细教程,亲测有效!