如何把润乾报表嵌入 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" 可以在报表上方显示功能条及翻页按钮等。
2.导出打印按钮
配置 needSaveAsWord="yes"needSaveAsExcel="yes"needSaveAsPdf="yes"needPrint=“yes” 可以显示导出 Word、Excel、Pdf 及打印按钮。
3.固定表头
配置 needScroll=“yes” scrollWidth=“100%” scrollHeight="100%" 可以将报表表头固定。
附 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>
更多集成部署相关问题请查看:集成部署相关问题分类导航