如何把润乾报表嵌入 web 应用中

润乾报表作为纯 JAVA 报表可以很方便地嵌入到 J2EE 页面中使用,目前润乾报表提供了多种发布方式供用户将报表嵌入到 JSP 页面。润乾报表包括参数报表和数据报表两种报表,下面分别看一下这两类报表的页面嵌入方式。

参数报表

由于参数报表大多数都和数据报表联合发布查询数据,所以这里只介绍联合使用方式(单独发布与数据报表一样)。参数报表嵌入页面时使用的标签为report:param,该标签的主要属性有 name、paramFileName 和 params。其中,name 指定了参数表单的名称,paramFileName 为参数报表模板文件名,params 为参数报表接收的参数,其格式要求为:参数名 1= 参数值 1; 参数名 2= 参数值 2…。具体使用可以参考如下书写方式:

<report:param

name="form1"

paramFileName="demo_arg.rpx"

params=""

/>

数据报表

数据报表嵌入页面使用的标签为report:html,常用属性包括 name(表格名称)、srcType(源类型,可以是 file、defineBean 或 reportBean)、funcBarLocation(是否包含工具条)、needPageMark(是否需要页码)、params(报表参数,同参数报表中 params)、exceptionPage(错误提示页面)等。

属性 srcType 的不同值指定了不同的报表发布方式,以满足不同场景的需要。下面分别来看一下。

file方式

当 srcType=”file”时为 file 方式发布报表,通过 reportFileName 属性指定报表模板名称完成报表发布。此方式为最常用的报表发布方式,具体使用可以参考如下书写方式:

<report:html

srcType=”file”

name="report1"

reportFileName="demo.rpx"

funcBarLocation="top"

needPageMark="yes"

params="d\_year=2014;u\_id=10001"

exceptionPage="/reportJsp/myError2.jsp"

/>

defineBean 方式

除了直接指定报表文件,还可以发布程序读入的报表定义(ReportDefine),使用这中方式需要指定 srcType=“defineBean”,具体使用可以参考如下书写方式:

<%  //读入报表定义

String reportPath = request.getRealPath("/reportFiles/api/wangge.rpx");

ReportDefine rd = (ReportDefine)ReportUtils.read(reportPath);

request.setAttribute("reportDefine",rd);

%>

<!—发布报表 -->

<report:html

name="report1"

srcType="defineBean"

beanName="reportDefine"

exceptionPage="/reportJsp/jsp/myError.jsp"

/>

reportBean 方式

除了直接指定报表模板和接收报表定义,有时还需要直接使用程序计算好的报表(IReport)进行发布,此时需要指定 srcType=“reportBean”,使用时可以参考如下写法:

<%  //程序计算报表

String reportPath = request.getRealPath("/reportFiles/api/wangge.rpx");

ReportDefine rd = (ReportDefine)ReportUtils.read(reportPath);

Context cxt = new Context();    

Engine engine = new Engine(rd, cxt);

IReport iReport = engine.calc();

request.setAttribute("report", iReport);

%>

<!—发布报表 -->

<report:html name="report1"

    srcType="reportBean"

    beanName="report"

    exceptionPage="/reportJsp/jsp/myError.jsp"

/>

context 方式

除了上述三种方式,还可以自定义 context 后传递给 tag 去发布,利用 context,可以传递参数和宏,还可以指定数据源、数据库连接工厂等。使用时可以参考如下写法:

<%

Context context = new Context();

//传递参数、数据源等,此处省略

request.setAttribute( “myContext”, context );

%>

<report:html ……..

  contextName=”myContext”

/>

常见属性配置效果

1.功能条

配置 funcBarLocation="top" 和 needPageMark="yes" 可以在报表上方显示功能条及翻页按钮等。

imagepng

2.导出打印按钮

配置 needSaveAsWord="yes"needSaveAsExcel="yes"needSaveAsPdf="yes"needPrint=“yes” 可以显示导出 Word、Excel、Pdf 及打印按钮。

imagepng

3.固定表头

配置 needScroll=“yes” scrollWidth=“100%” scrollHeight="100%" 可以将报表表头固定。

imagepng

附 1 <report:param/> 标签属性列表

(属性名都是大小写相关,属性值必须放在双引号中)

属性名 是否必填 属性含义 属性取值 缺省值
name 是 参数表单 form 在网页中的 ID 标识 符合变量命名规则的字符串,在本网页中应是唯一的 无
srcType 否 参数表单源的类型 同 html 报表 file
paramFileName 否 生成参数表单的 rpx 文件名 报表文件名,如为 "" 或"null",则不生成表单 无
beanName 否 当参数表单源类型为 defineBean 或 reportBean 时,已保存到 request 中的 bean 的名称或报表缓存池中的缓存 ID 符合变量命名规则的字符串,与保存参数表单源 bean 时的名称一致 无
contextName 否 同 html 单表参数模版式报表 变量名 无
resultPage 否 提交参数后,显示报表结果的页面 相对于应用根目录的页面 URL 当前页面
target 否 显示结果的窗体名 与 html form 的 target 属性取值相同 当前窗体 _self
hiddenParams 否 一些隐含的参数,如登录用户名、用户身份等 与 params 取值相同 无
needSubmit 否 是否需要自动生成提交参数的按钮 Yes 或 no Yes
submitLabel 否 提交钮的外观定义 Html 元素或文字 查询
params 否 生成此参数表单时需用到的报表参数,一般用于下拉数据窗口中的数据过滤条件 与 html 报表中的 params 相同 无
exceptionPage 否 显示参数表单异常信息的 JSP 页面 页面相对于应用根目录的路径名 无
needInputCssStyle 否 是否需要使用报表中设计的单元格样式,如字体、颜色等 Yes 或 no Yes

附 2 <report:param/> 标签属性列表

(属性名都是大小写相关,属性值必须放在双引号中)

属性名 是否必填         属性含义 取值属性 省缺值
浏览式报表和单表参数报表的公共属性
name 是 报表在网页中的 ID 标识 符合变量命名规则的字符串,在本网页中是唯一的 无
srcType 是 报表源的类型 见注 1 file
reportFileName 否 当报表源类型为 file 时 要发布的报表文件 报表文件名 无
beanName 否 当报表源类型为 defineBean 时,已保存到 request 中的 bean 的名称 符合变量命名的字符串,在与保存报表源 bean 时的名称一致,且在整个 web 的应用中应唯一 无
scale 否 报表缩放显示比例 实数 1
params 否 报表所需要的参数 用户提交的参数值 无
funcBarLocation 否 功能条的位置 top,bottom,both top
separator 否 功能按钮间的分隔符 html 元素或文字 空格
generateParamForm 否 是否生成缺省参数及宏显示在表单 yes 货 no no
funcBarFontSize 否 功能条字体大小 与 HTML 中定义字体大小相同 13px
funcBarFontColor 否 功能条字体颜色 html 文件中使用的颜色 black
functionBarColor 否 功能背景颜色 html 文件中使用的颜色 无
needSaveAsExcel 否 是否显示(存为 excel)的功能按钮 yes 货 no no
needSaveAsPdf 否 是否显示(存为 pdf)的功能按钮 yes 货 no no
needSaveAsWord 否 是否显示(存为 word)的功能按钮 yes 货 no no
needSaveAsText 否 是否显示(存为 text)的功能按钮 yes 货 no no
needPrint 否 需要显示打印机功能吗 yes 货 no no
printLabel 否 打印扭外观定义 html 元素或文字 打印
needDirectPrint 否 需要显示直接打印报表的 Applet 按钮吗 yes 货 no 当为 yes,如果定义了 funcBarFontColo 和 functionBarColor,那么应该用“#FFFFF”之类的颜色值,printLabel 应该只用文字 no
directPrintlmgLabel 否 直接打印扭外观定义 html 元素或文字 打印
needPrintPrompt 否 直接打印报表前是否提示 yes 货 no no
needSelectPrint 否 直接打印报表时是否选择打印机 yes 货 no no
savePrintSetup 否 是否将客户端电脑的打印设置发挥到服务器保存,以备下次打印这张报表的时候使用,该属性对直接打印也起作用 yes 货 no no
printButtonHeight 否 直接打印 Apple 按钮的高度 数值像素值 16px
printButtonWidth 否 直接打印 Apple 按钮的宽度 数值像素值 40px
printedRaq 否 被打印的报表文件名,用于打印与显示的报表不是同一张的情况 报表文件名(。raq)相对于 reportFileHome 无
excelLabel 否 存为 excel 按钮的外观定义 html 元素或文字 存为 Excel
pdfLabel 否 存为 pdf 按钮的外观定义 html 元素或文字 存为 pdf
wordLabel 否 存为 word 按钮的外观定义 html 元素或文字 存为 word
texLabel 否 存为 textl 按钮的外观定义 html 元素或文字 存为 word
textDataSeparatot 否 存为 text 时,同行单元格数据间的分隔符 字符 tab 建(\t)
textDataLineBreak 否 存为 Text 时 自定义换行符 换行符 \n
excelUsePaperSize 否 存为 excel 时,yes 按报表设计器的纸张尺寸,no 采用本 tag 标签中指定的 width,height 值 yes 货 no no
saveAsName 否 报表另存为 excel,pdf 或离线填报时的文件名 文本 与报表同名
excelPageStyle 否 存为 excel 时的分页方式,不指定此属性,则系统弹出对话框让用户选择 0 不分页 1 分页 无
pdfExportStyle 否 存为 PDF 时,导出的文件分页方式及导出类型,导出类型分为图形及 TXT 属性值格式为:“文件类型是否分页”文件类型取值为:graph 将文字导出为图形方式 txt 将文字导出为文本方式,1 表示分页 0 不分页 无
userFuncBarElements 否 用户自定义功能条中的功能元素 html 元素,可多个或多层组合,如 <table><tr><td><a href="..">xxx</a></td></tr></table> 无
needScroll 否 是否添加滚动轴,添加后报表不分页 yes 货 no no
scrollWidth 否 固定表头报表显示宽度 整数,像素或者百分百如 80% 600
scrollBorder 否 固定表头报表的边框 html 边框表示方法如:"border:1px solid red","border-top:1px solid blue;border-left:1px solid green;..." 无
scrollHeight 否 固定表头报表的显示高度 整数,像素或者百分百如 80% 400
appletJarName 否 用于报表打印的 applet 文件名 *.jar 或者 dir/…/*.jar runqianReportApplet.jar
exceptionPage 否 显示报表异常信息的 JSP 页面 页面相对于应用根目录的路径名 无
needLinkStyle 否 单元格有超链接属性时,是否用设计的字体属性显示 yes 货 no yes
calculateListenel 否 报表计算前后的 java 监听类 java 类名 无
paperType 否 纸张类型 纸张类型 如 A4,B5 报表设计纸张类型
paperWidth 否 纸张宽度 整数(毫米,像素,英寸 报表设计纸张宽度
paperHeight 否 纸张高度 整数(毫米,像素,英寸 报表设计纸张高度
leftMargin 否 左边距 整数(毫米,像素,英寸 报表设计纸张左边距
rightMargin 否 右边距 整数(毫米,像素,英寸 报表设计纸张右边距
topMargin 否 上边距 整数(毫米,像素,英寸 报表设计纸张上边距
bottomMargin 否 下边距 整数(毫米,像素,英寸 报表设计纸张下边距
serverPagePrint 否 applet 打印时是否采用服务器分页后再按页传输的方式。一般大数据量的报表采用此方式 yes 货 no yes
浏览式报表的属性
useCache 否 显示此报表是否从缓存系统中取已经计算好的报表 yes 货 no,如果是实时报表应该选择为 no yes
timeout 否 从缓存中取多少分钟内产生的报表,如果没有在次此时间内产生的报表,则产生一个新报表 整数,表示分钟  负数表示不限时间 -1
width 否 报表分页宽度 整数,单位为 PX 负数表示无穷大 报表设计页面宽度
height 否 报表分页高度 整数,单位为 PX 负数表示无穷大 报表设计页面高度
columns 否 报表分栏数 整数 报表设计分栏数
needPageMark 否 是否显示报表页数及翻页功能 yes 货 no yes
pageMarkLabel 否 报表页数显示扭的外观定义 html 元素或文字,用 {currPage} 表示当前页号,{totalPage}表示总页数 第 {currPage} 页 共 {totalPage} 页
firstPageLabel 否 翻到第一页的功能按钮外观定义 html 元素或文字 前一页
prevPageLabel 否 翻到前一页的功能按钮外观定义 html 元素或文字 上一页
nextPageLabel 否 翻到后一页的功能按钮外观定义 html 元素或文字 下一页
lastPageLabel 否 翻到最后页的功能按钮外观定义 html 元素或文字 最后页
displayNolinkPageMark 否 是否显示无超链接的页码标识(如第一页时的“最前页”和“上一页” yes 货 no no
单表填报式报表的属性(包括行式报表)
submit 否 提交按钮外观定义 html 元素或文字 提交
submitTarget 否 显示提交结果的窗口名,如果取值不是 _self,则当保存发生异常时,因当前输入页面还保留,故用户输入数据不会丢失 与 html 中的 from 的 target 属性相同 _self
validOnSubmit 否 是否在提交时进行有效性检验  1 设计单元格的有效性验证为立即校验                       2 tag 中设置属性 validOnSubmit="no" 这样用户输入不合法值时会弹出信息提示错误,用户确定后可以修改或不修改,达到警告的目的,提交数据时不会再校验 yes 货 no yes
needOfflineInput 否 是否可以离线填报 yes 货 no no
offline 否 离线保存按钮定义 html 元素或文字 保存到本机
contextName 否 见注释 2 变量名 无
needImportExcel 否 是否可以从 excel 文件上载数据来填报 yes 货 no 或者“yes,0" 表示可以上载到页面中,但禁止直接上载到数据库 no
importExcelLabel 否 导入 excel 文件按钮定义 html 元素或文字 从 excel 导入
imputListener 否 保存到数据前后的 java 监听器类 java 类名
backAndRefresh 否 提交数据以后,是否返回页面并刷新页面 yes 或 no 或 url,若为 url 则提交后将定位到此指定的 url yes
selectText 否 单元格获得焦点时,是否选中单元格的内容 yes 或 no no
promptAfterSave 否 是否弹出提示数据以保存 yes 或 no yes
saveDataByListener 否 是否由用户写的填报监听器来保存数据 yes 或 no,为 yes 时则报表系统不保存数据,只向监听器返回一组 SQL 语句 no
autoCalcOnlyOnSubmit 否 只有在提交数据时执行自动运算 yes 或 no,在填报单元格很多造成移动光标慢时可设为 yes no
inputExceptionPage 否 显示填报表保存数据时的异常信息的 JSP 页面 页面相对于应用根目录的路径名 无
keyRepeatError 否 插入新记录时,主键重复是否报错 yes 或 no,为 yes 时则报错,为 no 是则用新数据更新原记录 no
行式填报报表的属性
insertRowLabel 否 插入行外观按钮定义 html 元素或文字 插入
appendRowLabel 否 添加行外观按钮定义 html 元素或文字 添加
deleteROWLabel 否 删除行。。 html 元素或文字 删除
importExcelAppend 否 行式报表填报中是否采用追加行的方式导入 EXCEL 文件中的数据区行 yes 或 no,属性为 yes 时,在当前扩展区尾部追加 excel 文件中所有的数据区行。   属性为 NO 时,在当前光标所在行开始,用 excel 文件中的数据区进行逐行替换当前扩展区的数据行。替换完以后,其余的行采用追加导入的方式 yes

注 1:srcType 的取值:

(1)如要发布的报表源为报表文件,其值为 file。

(2)如要发布的报表源为经过 API 处理的

com.raqsfot.report.model.ReportDefine 对象,则其值为 defineBean。

(3)如要发布的报表源为经过 API 处理的

com.raqsoft.report.usermodel.IReport 对象,则其值为 reportBean。

注 2:如果调用 TAG 前,是用 API 生成的 Context 对象来运算报表,那么应将此对象传给 TAG,示例如下:

<%

……..

Context context = new Context();

…….

request.setAttribute( “myContext”, context );

%>

<report:html ……..

contextName=”myContext”

/>

注 3:如果 scrollWidth 和 scrollHeight 采用百分比的格式,那么滚动区域的高度和宽度是根据 jsp 中报表外面的元素的高度和宽度而定的,如果报表外面的元素没有指定高度和宽度,可能会出问题。

举例如下,在自定义的 jsp 中,首先定义在报表外面 table 元素的 width 和 height,这样可以保证滚动区域正常显示。

<table style="width:40%; height:80%;overflow:hidden;table-layout:fixed">

<tr><td valign=top>

<report:html name="report1" reportFileName="<%=file%>"

needScroll="yes"

scrollWidth="80%"

scrollHeight="50%"

......

/>

</td></tr></table>

更多集成部署相关问题请查看:集成部署相关问题分类导航