如何把润乾报表嵌入 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>