在服务端使用专业报表
上一节我们学习了使用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、如果你要使用后台数据生成专业报表,可以参考: