5.1 基本的文本报表
我们构建一个报表ProductLinesAfter.rptdesign,使用示例数据库,空白模板,sql选择查询作为数据源,新建数据集Data Set:
select *
from CLASSICMODELS.PRODUCTLINES
查询数据源资源管理器,注意到表PRODUCTLINES中有一个字段HTMLDESCRIPTION是CLOB字段的:
存储内容为html格式的字符文档,其中prodcutline为Vintage Cars的htmldescription如下:
<html>
<h4><font face="Verdana">Vintage Cars</font></h4><p>
<font face="Times New Roman">Our Vintage Car models realistically portray automobiles produced from the early</font>
<b><font face="Arial" size="2">1900s</font></b> <font face="Times New Roman">through the</font> <b>
<font face="Arial" size="2">1940s</font></b>.<font face="Times New Roman"> Materials used include
<i><b>Bakelite<sup>®</sup>, diecast, plastic and wood</b></i>. Most of the replicas are in the </font>
<b><font face="Arial" size="2">1:18</font></b> and <b>
<font face="Arial" size="2">1:24</font></b> <font face="Times New Roman">scale sizes, which provide the optimum in detail and accuracy. Prices range from</font>
<i><b><font face="Arial" color="#009933" size="2">$30.00</font></b></i> up to <i><b>
<font color="#009933" face="Arial" size="2">$180.00</font></b></i>
<font face="Times New Roman">for some <i><b>special limited edition replicas</b></i>. All models include a
<i><b>certificate of authenticity</b></i> from their manufacturers and <i><b>come fully assembled</b></i> and ready for display in the home or office.</font></p>
<font face="Times New Roman">
<u><b>Additional Information</b></u>
</font>
<ul>
<li><font face="Times New Roman">No Toxic Materials</font></li>
<li><font face="Times New Roman">Monogram Service Available</font></li>
<li><font face="Times New Roman">Suitable for Children Above 10 Years of Age</font></li>
<li><font color="#FF0000" face="Times New Roman"><i><b>90 Day Money Back Guarantee</b></i></font></li>
</ul>
</html>
布局报表:
插入一个1行3列的网格,其中第一列插入一个图片,为url嵌入的名为Classic-Models-Minimal-S.jpg,第二列插入一个标签,名为Product Lines,第三列插入一个名为Classic Models Inc的标签和一个无格式的动态文本701 Gateway Blvd,
South San Francisco, CA 94080
如下所示:
然后网格下方插入一个1行4列的表,合并页眉,插入标签Product Lines
详细数据行,第一列拖入dataSetRow["PRODUCTLINE"],第二列插入文本,选择HTML格式的动态文本,输入<H5><VALUE-OF>row["TEXTDESCRIPTION"]</VALUE-OF></H5>
第三列插入动态文本,输入row["HTMLDESCRIPTION"]
第四列插入图像,
作适当的布局和美化,效果如下:
在web查看器中查看报表,运行效果如下:
这说明了我们可以在文本和动态文本中通过插入html格式的字符串来实现一些特效。
例如我们可以在中间插入一列文本,文本是html格式的,内容如下:
<html>
<script language='JavaScript' type='text/JavaScript'>
function printproduct(str){alert(str);}
</script>
<body>
<center>
<form>
<input type='button' value='单击可以获取行信息' οnclick="alert('<VALUE-OF>row["PRODUCTLINE"]</VALUE-OF>:<VALUE-OF>row["TEXTDESCRIPTION"]</VALUE-OF>')">
</form>
<a href='' title='<VALUE-OF>row["TEXTDESCRIPTION"]</VALUE-OF>' οnclick="printproduct('<VALUE-OF>row["TEXTDESCRIPTION"]</VALUE-OF>')" ><b><i><u><VALUE-OF>row["PRODUCTLINE"]</VALUE-OF></u></i></b></a>
</center>
</body>
</html>
布局和预览分别如下:
把鼠标放在超链接上会有帮助文本出现,当然单击按钮和超链接一样可以获得产品线文本描述。
上面的一段html说明了,在文本中可以输入html,可以自定义javascript脚本,在需要行信息的时候,只需要加上[<VALUE-OF>列绑定</VALUE-OF>]即可,html在运行调用之前会把[<VALUE-OF>列绑定</VALUE-OF>]替换成一个不带引号的字符串常量。
这意味着我们可以在birt中编写网页,只要在需要数据集的地方插入数据集即可,这样我们可以编写丰富的文本类报表,比如会计凭证,信笺封面,信笺正文,甚至添加ajax特性。
5.2 交互式文本报表
下文详细说明标签,文本,动态文本,数据的差别。
标签只能插入文字,无法包含任何格式信息;
动态文本能把clob中的字符显示出来,如果clob字段包含HTML标签,则显示浏览器解释后的HMTL效果;
数据能把clob中的字符显示出来,如果clob字段中包含html标签,则连同标签一起显示出来,不区分是否为html文本;
而文本,对于clob</