在服务端使用专业报表

上一节我们学习了使用Excel报表生成网页或PDF文件发送到客户端浏览器,这种方式需要在服务端安装Office,而且效率也较低。

我们可以使用专业报表(个人建议你作为开发者,应该学一下专业报表,真的不难)代替Excel报表,效率可以提高6倍左右,且更加灵活,能实现更为复杂的报表功能。

但是专业报表目前只能完美生成PDF文件,不过既然都是静态的,PDF的效果更好,如果要在客户端打印,PDF会更有优势,因为它可以进行页面设置。

HttpRquest事件有个WriteReportAsPDF方法,用于将专业报表生成一个PDF文件并发送到客户端,而且生成过程和发送过程都是异步的,使用起来很方便。

一个例子

接下来我们用一个例子,来看看如何在服务端使用专业报表,并和Excel报表比较一下效率,示例中使用的专业报表可以参考:

http://www.foxtable.com/webhelp/topics/1238.htm

1、首先打开CaseStudy目录下的示例文件"Excel报表.foxdb"文件。

2、将HttpRequest事件代码设置为:

If e.Path.StartsWith("Reports\")
    e.ResponseEncoding = "gb2312"
    Select Case e.Path
        Case  "Reports\jianli1.htm" 
'
Excel报表
            Dim Book As New XLS.Book(ProjectPath & "Attachments\
资料卡.xls")
            e.WriteBookAsHTML(Book)
        Case  "Reports\jianli2.htm"
'
专业报表
            Dim doc As New PrintDoc '
定义一个报表
            Dim rt As New prt.RenderTable()
'
定义一个表格对象
            Dim rx As New prt.RenderText
'
定义一个文本对象
            Dim CurRow As Row = Tables(
"
员工").Current
           
'
加入标题
            rx.text =
"
员工资料卡"
            rx.Style.FontBold = True
'
字体加粗
            rx.Style.FontSize = 16
'
大体大小为16
            rx.Style.TextAlignHorz = prt.AlignHorzEnum.Center
'
水平居中排列
            rx.Style.Spacing.Bottom = 3
'
和下面的对象(表格)距离3毫米
            doc.Body.Children.Add(rx)
'
加入到报表中
           
'
指定行数?列数?列宽?行高
            rt.Rows.Count = 7
'
设置总行数
            rt.Cols.Count = 5
'
设置总列数
            rt.Height = 80
'
设置表格的高度为80毫米
            rt.Rows(6).Height = 40
'
设置第7(显示备注的行)的高度为40毫米,剩余高度被平均分排到其他行
            rt.Cols(0).Width = 24
'
设置前四列的宽度,剩余的宽度被分配给5(显示图片的那列)
            rt.Cols(1).Width = 35
            rt.Cols(2).Width = 24
            rt.Cols(3).Width = 40
           
'
设置合并单元格
            rt.Cells(0,4).SpanRows = 6
'
1行第5个单元格向下合并6(用于显示照片)
            rt.Cells(4,1).SpanCols = 3
'
5行第2个单元格向右合并3(用于显示地址)
            rt.Cells(6,0).SpanCols = 5
'
7行第1个单元格向右合并5(用于显示备注)
           
'
设置表格样式
            rt.CellStyle.Spacing.All = 1
'
单元格内容缩进1毫米
            rt.Style.GridLines.All = New prt.Linedef
'
设置网格线
            rt.Style.TextAlignVert = prt.AlignVertEnum.Center
'
内容垂直居中
            rt.Rows(6).Style.TextAlignVert = prt.AlignVertEnum.Top
'
唯独第7行是备注,内容靠上对齐
           
'下面很简单,指定每一个单元格的内容
           
rt.Cells(0,0).Text= "姓名"
            rt.Cells(0,1).Text = CurRow(
"
姓名")
            rt.Cells(0,2).Text=
"
出生日期"
            rt.Cells(0,3).Text = CurRow(
"
出生日期")
            rt.Cells(1,0).Text=
"
部门"
            rt.Cells(1,1).Text = CurRow(
"
部门")
            rt.Cells(1,2).Text=
"
雇佣日期"
            rt.Cells(1,3).Text = CurRow(
"
雇佣日期")
            rt.Cells(2,0).Text=
"
性别"
            rt.Cells(2,1).Text = CurRow(
"
性别")
            rt.Cells(2,2).Text=
"
职务"
            rt.Cells(2,3).Text = CurRow(
"
职务")
            rt.Cells(3,0).Text=
"
城市"
            rt.Cells(3,1).Text = CurRow(
"
城市")
            rt.Cells(3,2).Text=
"
邮政编码"
            rt.Cells(3,3).Text = CurRow(
"
邮政编码")
            rt.Cells(4,0).Text=
"
地址"
            rt.Cells(4,1).Text = CurRow(
"
地址")
            rt.Cells(5,0).Text=
"
家庭电话"
            rt.Cells(5,1).Text = CurRow(
"
家庭电话")
            rt.Cells(5,2).Text=
"
办公电话"
            rt.Cells(5,3).Text = CurRow(
"
办公电话")
            rt.Cells(6,0).Text = CurRow(
"
备注")
            rt.Cells(0,4).Image = GetImage(CurRow(
"
照片"))
            doc.Body.Children.Add(rt)
'
将表格对象加入到报表中
            e.WriteReportAsPDF(doc
'
PDF格式将专业报表发送到客户端.
        Case Else
            e.AsReportServer("Reports\")
   
End Select
End
If

3、在命令窗口执行:

HttpServer.Prefixes.Add("http://127.0.0.1/")
HttpServer
.Start()

现在在浏览器输入网址:

http://127.0.0.1/Reports/jianli1.htm

得到的是通过Excel报表生成的PDF文件。

如果输入网址:

http://127.0.0.1/Reports/jianli2.htm

得到的是通过专业报表生成的PDF文件。反复刷新页面,可以看到专业报表的反应速度远远超过Excel报表。

4、如果你要使用后台数据生成专业报表,可以参考:

SQLCommand

SQLFind

SQLSelect


本页地址:http://www.foxtable.com/mobilehelp/topics/0290.htm