- 浏览: 171590 次
- 性别:
- 来自: 陕西
文章分类
最新评论
-
田野君:
您好,请问,我的已经出现:Generating grub.cf ...
重装WIN7之后使用Ubuntu LiveCD修复grub2双系统引导 -
wanghlwin:
分页的page类,只要写出来了,基本上都能通用吧楼主?
忍不住了,凑凑热闹,我也来秀一下我的分页类 -
zskangs1126:
谢谢分享,学习了
ca粗略配置 -
lord_is_layuping:
为什么不直接这样?:select deptno from de ...
Oracle minus 操作符使用手记 -
laiweiweihi:
=。= LZ没怎么谈SpringMVC呀。╮(╯▽╰)╭
年终闲话mvc
因为系统需要,添加报表功能,瞄上了birt,学习之,入门教程看了一大堆,还好,多种数据源支持,对于sql还没精通,看着一大堆sql还有点犯难,所以,xml数据源成了我的首选,仔细研究之下,发现原来birt提供的初级功能原来很少,报表经常需要替换数据源来显示其不同的内容,而传统的设置 xml数据源只是事前指定好xml文件,或url,google了一下,基本没有发现可用 的例子,郁闷之,自己琢磨了一周几乎,更郁闷的是其实问题早有了答案,就载在acegi的权限控制之上一直未看到胜利的曙光下面把自己动态修改xml数据源的成功发上来我用的是webwork,其他用户请酌情修改相应参数
这个是用来view报表的action 需要传入的参数是
reban.reportName = 报表文件的文件名
rbean.xmlDataUrl = 报表xml datasource url ,可以是stream,或xxx.xml之类的,输入浏览器能显示xml即可
BirtReportViewer.java
BirtEngine.java
使用方法
在浏览器中输入url
http://localhost:8800/stat/birtviewer.action?rbean.reportName=index.rptdesign&rbean.xmlDataUrl=http://localhost:8800/stat/armrptxml.action?reporter.id=008a81b61c30d47e011c4f446718001b
对报表熟悉的人应该知道这个方法
这个是用来view报表的action 需要传入的参数是
reban.reportName = 报表文件的文件名
rbean.xmlDataUrl = 报表xml datasource url ,可以是stream,或xxx.xml之类的,输入浏览器能显示xml即可
BirtReportViewer.java
package com.morepower.controller.birt; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.InputStream; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import org.eclipse.birt.report.engine.api.EngineConstants; import org.eclipse.birt.report.engine.api.HTMLRenderOption; import org.eclipse.birt.report.engine.api.HTMLServerImageHandler; import org.eclipse.birt.report.engine.api.IHTMLRenderOption; import org.eclipse.birt.report.engine.api.IRenderOption; import org.eclipse.birt.report.engine.api.IReportEngine; import org.eclipse.birt.report.engine.api.IReportRunnable; import org.eclipse.birt.report.engine.api.IRunAndRenderTask; import org.eclipse.birt.report.model.api.DataSourceHandle; import org.eclipse.birt.report.model.api.ElementFactory; import org.eclipse.birt.report.model.api.OdaDataSetHandle; import org.eclipse.birt.report.model.api.OdaDataSourceHandle; import org.eclipse.birt.report.model.api.ReportDesignHandle; import org.eclipse.birt.report.model.api.TableHandle; import org.eclipse.birt.report.model.api.activity.SemanticException; import com.morepower.controller.AbstractAction; import com.morepower.util.BirtEngine; import com.morepower.view.BirtReporterBean; import com.opensymphony.webwork.ServletActionContext; import com.opensymphony.webwork.interceptor.ServletRequestAware; public class BirtReportViewer extends AbstractAction implements ServletRequestAware { /** * */ private static final long serialVersionUID = 1L; private static String REPORT_DIR = "birt-reportors"; private static String REPORT_IMAGE_DIR = "images"; private IReportEngine birtReportEngine = null; private HttpServletRequest request; private BirtReporterBean rbean; private InputStream reportStream; private static String DATASOURCE_NAME = "DataSource"; private static String DATASET_NAME = "DataSet"; private static String QueryText = ""; public InputStream getReportStream() { return this.reportStream; } @Override public String execute() throws Exception { // get report name and launch the engine // resp.setContentType("text/html"); // resp.setContentType( "application/pdf" ); // resp.setHeader ("Content-Disposition","inline; filename=test.pdf"); String reportName = rbean.getReportName(); ServletContext sc = ServletActionContext.getServletContext(); birtReportEngine = BirtEngine.getBirtEngine(sc); IReportRunnable design = birtReportEngine.openReportDesign(sc .getRealPath(java.io.File.separator + REPORT_DIR) + java.io.File.separator + reportName); ReportDesignHandle report = (ReportDesignHandle) design .getDesignHandle(); // 只是动态更换数据源即可,不需改变报表的其他结构 // 暂时不支持动态创建表格 // create task to run and render report buildReport(report); IRunAndRenderTask task = birtReportEngine .createRunAndRenderTask(design); task.getAppContext().put(EngineConstants.APPCONTEXT_CLASSLOADER_KEY, BirtReportViewer.class.getClassLoader()); // set output options HTMLRenderOption options = new HTMLRenderOption(); options.setImageHandler(new HTMLServerImageHandler()); options.setImageDirectory(sc.getRealPath(java.io.File.separator + REPORT_IMAGE_DIR)); options.setBaseImageURL(request.getContextPath() + java.io.File.separator + REPORT_IMAGE_DIR); options.setOutputFormat(HTMLRenderOption.OUTPUT_FORMAT_HTML); options.setOption(IRenderOption.HTML_PAGINATION, Boolean.TRUE); options.setOption(IHTMLRenderOption.MASTER_PAGE_CONTENT, new Boolean( true)); // options.setOutputFormat(HTMLRenderOption.OUTPUT_FORMAT_PDF); options.setOption(HTMLRenderOption.HTML_ENABLE_METADATA, Boolean.FALSE); ByteArrayOutputStream bout = new ByteArrayOutputStream(); //String renderstr = bout.toString("utf-8"); options.setOutputStream(bout); task.setRenderOption(options); /* * 另外一种方案,直接在action中构造inputStream 对像,但这样 * 可能导致你的报表viewer与具体业务类耦合! * task.getAppContext().put(org.eclipse.datatools.enablement.oda.xml.Constants.APPCONTEXT_INPUTSTREAM, reportStream); task.getAppContext().put(org.eclipse.datatools.enablement.oda.xml.Constants.APPCONTEXT_CLOSEINPUTSTREAM, Boolean.TRUE);*/ // run report task.run(); task.close(); reportStream = new ByteArrayInputStream(bout.toByteArray()); return SUCCESS; } /** * 清除原有的数据源 */ protected void clearDataSource(ReportDesignHandle designHandle) { //DataSourceHandle dsh = designHandle.findDataSource(DATASOURCE_NAME); //dsh.drop(); int count = designHandle.getDataSources().getCount(); try { for (int i = 0; i < count; i++) designHandle.getDataSources().drop(i); } catch (SemanticException e) { log.error(e); e.printStackTrace(); } } /** * 清除原有的数据集 */ protected void clearDataSet(ReportDesignHandle designHandle) { getQueryText(designHandle); int count = designHandle.getDataSets().getCount(); try { for (int i = 0; i < count; i++) designHandle.getDataSets().drop(i); } catch (SemanticException e) { log.error(e); e.printStackTrace(); } } /** * */ protected void getQueryText(ReportDesignHandle designHandle) { QueryText = (String) designHandle.getDataSets().get(0).getProperty( "queryText"); } protected void buildReport(ReportDesignHandle designHandle) { try { ElementFactory designFactory = designHandle.getElementFactory(); buildDataSource(designFactory, designHandle); buildDataSet(designFactory, designHandle); TableHandle table = (TableHandle) designHandle.getBody().get(0); table.setDataSet(designHandle.findDataSet(DATASET_NAME)); } catch (SemanticException e) { log.error(e); e.printStackTrace(); } } protected void buildDataSource(ElementFactory designFactory, ReportDesignHandle designHandle) throws SemanticException { clearDataSource(designHandle); OdaDataSourceHandle dsHandle = designFactory.newOdaDataSource( DATASOURCE_NAME, "org.eclipse.birt.report.data.oda.xml" ); /*dsHandle.setProperty( "odaDriverClass", "com.mysql.jdbc.Driver" ); dsHandle.setProperty( "odaURL", "jdbc:mysql://localhost/stat" ); dsHandle.setProperty( "odaUser", "root" ); dsHandle.setProperty( "odaPassword", "" );*/ dsHandle.setProperty("FILELIST", rbean.getXmlDataUrl()); designHandle.getDataSources().add(dsHandle); } protected void buildDataSet(ElementFactory designFactory, ReportDesignHandle designHandle) throws SemanticException { clearDataSet(designHandle); OdaDataSetHandle dsHandle = designFactory.newOdaDataSet( DATASET_NAME, //"org.eclipse.birt.report.data.oda.jdbc.JdbcSelectDataSet" ); /* OdaDataSetHandle dsHandle = designFactory.newOdaDataSet(DATASET_NAME,*/ "org.eclipse.birt.report.data.oda.xml.dataSet"); dsHandle.setPrivateDriverProperty("XML_FILE", rbean.getXmlDataUrl()); dsHandle.setPrivateDriverProperty("MAX_ROW", "-1"); dsHandle.setQueryText(QueryText); dsHandle.setDataSource(DATASOURCE_NAME); designHandle.getDataSets().add(dsHandle); } @Override public void setServletRequest(HttpServletRequest arg0) { request = arg0; } @Override public void destory() { BirtEngine.destroyBirtEngine(); } public BirtReporterBean getRbean() { return rbean; } public void setRbean(BirtReporterBean rbean) { this.rbean = rbean; } @Override public void initilize() { try { log.info("报表系统初始化中............"); BirtEngine.initBirtConfig(); REPORT_DIR = BirtEngine.getBirtReportorProperty("report_dir"); REPORT_IMAGE_DIR = BirtEngine .getBirtReportorProperty("report_image_dir"); DATASOURCE_NAME = "DataSource"; DATASET_NAME = "DataSet"; } catch (Exception e) { e.printStackTrace(); log.error(e); } } }
BirtEngine.java
package com.morepower.util; import java.io.InputStream; import java.io.IOException; import java.util.Properties; import java.util.logging.Level; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.eclipse.birt.report.engine.api.EngineConfig; import org.eclipse.birt.report.engine.api.IReportEngine; import javax.servlet.*; import org.eclipse.birt.core.framework.PlatformServletContext; import org.eclipse.birt.core.framework.IPlatformContext; import org.eclipse.birt.core.framework.Platform; import org.eclipse.birt.core.exception.BirtException; import org.eclipse.birt.report.engine.api.IReportEngineFactory; public class BirtEngine { private static IReportEngine birtEngine = null; private static Properties configProps = new Properties(); private final static String configFile = "BirtConfig.properties"; protected final static Log log = LogFactory.getLog(BirtEngine.class); public static synchronized void initBirtConfig() { loadEngineProps(); } public static synchronized IReportEngine getBirtEngine(ServletContext sc) { if (birtEngine == null) { EngineConfig config = new EngineConfig(); if (configProps != null) { String logLevel = configProps.getProperty("logLevel"); Level level = Level.OFF; if ("SEVERE".equalsIgnoreCase(logLevel)) { level = Level.SEVERE; } else if ("WARNING".equalsIgnoreCase(logLevel)) { level = Level.WARNING; } else if ("INFO".equalsIgnoreCase(logLevel)) { level = Level.INFO; } else if ("CONFIG".equalsIgnoreCase(logLevel)) { level = Level.CONFIG; } else if ("FINE".equalsIgnoreCase(logLevel)) { level = Level.FINE; } else if ("FINER".equalsIgnoreCase(logLevel)) { level = Level.FINER; } else if ("FINEST".equalsIgnoreCase(logLevel)) { level = Level.FINEST; } else if ("OFF".equalsIgnoreCase(logLevel)) { level = Level.OFF; } config.setLogConfig(configProps.getProperty("logDirectory"), level); } //sc.getRealPath("")+java.io.File.separator+configProps.getProperty("engine_home") config.setEngineHome(""); IPlatformContext context = new PlatformServletContext(sc); log.info(context.getPlatform()); config.setPlatformContext(context); try { Platform.startup(config); } catch (BirtException e) { e.printStackTrace(); } IReportEngineFactory factory = (IReportEngineFactory) Platform .createFactoryObject(IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY); birtEngine = factory.createReportEngine(config); } return birtEngine; } public static synchronized void destroyBirtEngine() { if (birtEngine == null) { return; } birtEngine.shutdown(); Platform.shutdown(); birtEngine = null; } public Object clone() throws CloneNotSupportedException { throw new CloneNotSupportedException(); } private static void loadEngineProps() { try { // Config File must be in classpath ClassLoader cl = Thread.currentThread().getContextClassLoader(); InputStream in = cl.getResourceAsStream(configFile); configProps.load(in); in.close(); } catch (IOException e) { e.printStackTrace(); } } public static String getBirtReportorProperty(String key){ return configProps.getProperty(key); } }
robin 写道
使用方法
在浏览器中输入url
http://localhost:8800/stat/birtviewer.action?rbean.reportName=index.rptdesign&rbean.xmlDataUrl=http://localhost:8800/stat/armrptxml.action?reporter.id=008a81b61c30d47e011c4f446718001b
对报表熟悉的人应该知道这个方法
发表评论
-
JVM参数对J2EE性能优化的影响
2011-06-17 08:59 1305转载来自:http://sinckyzhang.bl ... -
编码,java,utf-8,gbk
2011-03-04 12:46 1589try { ZipOutputStream o ... -
DWR 初窥
2009-02-09 11:38 1156由于系统需要,需要dwr 一些信息,昨天读代码,看结构,郁闷, ... -
Dwr 使用手记之一
2009-01-08 22:32 1080Dwr 手记之一 dwr 是js 和java通讯的优秀框架,我 ... -
忍不住了,凑凑热闹,我也来秀一下我的分页类
2008-12-18 21:50 1498看到javaeye上分页的帖子实在太多了,上半年,做网站,分页 ...
相关推荐
描述中提到,由于对SQL不够熟悉,作者选择了XML数据源,但在尝试过程中发现BIRT的初级功能对动态数据源的支持有限。传统方法是预先设定XML文件或URL,但作者需要根据不同情况替换数据源内容,却未能找到相关示例。...
总结起来,BIRT XML数据源提供了一种有效的方法来处理和展示XML格式的数据,为开发人员在报表设计中提供了更大的灵活性。通过正确配置和使用,可以充分利用XML数据的结构化特性,生成具有洞察力的报表和分析结果。
总结来说,使用BIRT与XML数据源相结合,能够帮助开发者高效地处理和展示结构化的XML数据。通过理解BIRT的数据源配置、数据集创建以及报表设计,你可以轻松地将XML文件中的信息转化为直观的报表,这对于数据驱动的...
4. **在运行时应用动态数据源**:当报表运行时,BIRT会使用这些参数值填充到数据源的连接字符串中,从而动态地连接到指定的数据库。 5. **测试和验证**:确保动态数据源配置正确无误后,可以运行报表进行测试,观察...
本文将深入探讨Birt报表XML数据源的配置以及报表配置的相关知识点。 **1. Birt XML数据源配置** 在Birt中,XML数据源允许开发者从XML文档或XML Web服务中提取数据。配置XML数据源主要包括以下几个步骤: 1. **...
标题 "BIRT 动态数据源" 指的是Business Intelligence and Reporting Tools(BIRT)框架中的一个特性,允许报告开发者在运行时动态地选择或更改数据源。BIRT是开源的Java EE平台,用于创建数据可视化和业务智能报告...
在BIRT中,数据源通常可以是数据库连接、XML文件、Web服务等。然而,当数据源为动态生成或者来自复杂的业务逻辑时,直接使用POJO对象作为数据源更为合适。这允许我们直接操作Java对象,避免了中间转换步骤,提高效率...
**数据源与数据集:** 报表的数据来源于数据源,BIRT支持多种类型的数据源,如数据库、XML、Web服务等。在设计视图中,右键单击“Data Explorer” -> “New Data Source”,按照向导配置相应的数据连接信息。接着,...
3. **设置数据源和数据集**: BIRT支持多种数据源类型,如JDBC、XML等。通过`IReportRunnable`接口的`getDataSources`和`getDataSets`方法获取并设置数据源和数据集。 4. **创建报表参数**: 如果报表需要参数,可以...
在BIRT中,报表设计通常由一个XML文件(.rptdesign)定义,包括数据源、数据集、布局等元素。要实现动态列,我们需在运行时动态修改数据集的SQL查询,将`columnNames`中包含的列名添加到SELECT语句中。这样,数据...
数据引擎支持多种数据源,包括数据库、XML和Web服务。图表引擎则生成各种图形,使数据可视化。 2. **BIRT 3.7版本**: BIRT 3.7发布于2011年6月,该版本包含了一系列改进和新功能。例如,增强了对大数据源的支持,...
3. **数据源配置**:根据项目需求,配置各种数据源,如数据库、XML文件或Web服务等。 **三、报表设计** 1. **新建报表项目**:在Eclipse中,通过“File” -> “New” -> “BIRT” -> “Report”来创建一个新的报表...
3. **Data Access**:Birt Viewer支持多种数据源,包括关系型数据库、XML、Web服务等。源代码中包含了数据适配器(Data Adapter)的实现,允许开发者自定义数据访问策略。 4. **Parameter Handling**:报表通常需要...
* 数据源:数据的来源,或提供者,如 xml 数据源、jdbc 数据源等。 * 数据集:数据集合,它必须与数据源关联,可以理解为查询的结果。 * 报表和报表项,报表可视为是针对一组数据集的表现形式,而报表项这是这个表现...
1. **BIRT简介**:BIRT是一个基于Eclipse的开放源代码报表系统,它提供了丰富的报告设计工具,支持多种数据源,包括关系数据库、XML数据、Java对象等。BIRT不仅适用于Java环境,还可以与其他编程语言集成,提供Web和...
数据源是数据的来源,如XML数据源或JDBC数据源。数据集是数据的集合,通常与数据源关联,相当于查询结果。报表是对一组数据集的可视化展示,而报表项是报表中的具体单元,类似于窗体和控件。报表、数据集和数据源...
BIRT是Eclipse基金会的一个项目,它提供了一个灵活的报表设计环境,支持多种数据源,包括关系数据库、XML、Web服务等。BIRT分为两大部分:设计时组件(Design-time)和运行时组件(Run-time)。设计时组件允许开发者...
作为Eclipse基金会下的一个项目,BIRT凭借其强大的功能,如广泛的数据库产品兼容性、XML数据源支持、文本文件数据源处理能力,以及对Java程序生成的数据源的灵活性,迅速在报表设计领域崭露头角。 #### 二、BIRT...