24
2012
05

☆ASP中生成动态图表☆

以前在这里也曾经有一些文章谈到了在ASP中生成动态图表的问题,但那些文章中所谈到的一些方法都有某些方面的限制,如需要在客户端安装office2000或安装OWC,有些则可能在Intranet中使用时没什么问题,但在通过Internet访问的时候,就可能出现无法正常工作的现象(这主要和SQL Server的安全设置有关)。那么,我们如何来避免这些问题呢?有一个很好的方法,就是将在ASP中生成的图表转换成图片文件保存在服务器上,这样用户最终看到的是GIF图片格式的图表,我想现在的任何一种浏览器在观看GIF图片的时候都没什么问题吧。:)也许唯一可能的问题就是如何对这些生成的临时图片文件的处理问题,关于这个问题在最后我们会讨论。

chart.asp
<%
Function ExportChartToGIF(cspace)
Dim fso
Dim sFilePath
Dim sFileName

'生成临时文件的文件名
set fso = CreateObject("Scripting.FileSystemObject")
sFilePath = Request.ServerVariables("PATH_TRANSLATED")
sFilePath = left(sFilePath, InStrRev(sFilePath, "\"))
sFilePath = sFilePath & "tmp\"
sFileName = fso.GetTempName()
sFileName = sFileName & ".gif"
set fso=nothing
'将chart转换成GIF文件保存在临时目录
m_cspace.ExportPicture sFilePath & sFileName, "gif", 200, 150

'将生成的临时图片报存在session中以便于删除
Session("TC:" & sFilePath & sFileName) = sFilePath & sFileName
ExportChartToGIF = sFileName
End Function

Sub BindChartToDSC(cspace, dsc, sRSName, sCategories, sValues)
Dim cht
Dim ser

set c = cspace.Constants

cspace.Clear

' 绑定数据源
set cspace.DataSource = dsc

cspace.DataMember = sRSName

set cht = cspace.Charts.Add()
cht.HasLegend = True
cht.Type = c.chChartTypePie

set ser = cht.SeriesCollection.Add()
ser.SetData c.chDimCategories, 0, sCategories
ser.SetData c.chDimValues, 0, sValues

set dls = ser.DataLabelsCollection.Add()
dls.HasPercentage = True
dls.HasValue = False

End Sub
%>
<html>

<head>
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>利用OWC动态生成图表</title>
</head>

<body>
<%
set m_cspace = server.CreateObject("OWC.Chart")
set DSC = server.CreateObject("OWC.DataSourceControl")
DSC.ConnectionString = "DSN=pubs;uid=sa"
DSC.RecordsetDefs.AddNew "select distinct state,num=COUNT(*) FROM authors GROUP BY state",DSC.Constants.dscCommandText,"ChartData"
BindChartToDSC m_cspace, DSC, "ChartData", "state", "num"
m_sFilePath = ExportChartToGIF(m_cspace)
set m_cspace=nothing
set m_cht=nothing
%>




<img src="tmp/<%= m_sFilePath %>">
</BODY>
</HTML>
其中我们会发现两个有用的函数:ExportChartToGIF和BindChartToDSC
ExportChartToGIF(cspace)是一个用来将chart转换成GIF文件的函数
cspace:一个OWC.Chart的实例
BindChartToDSC(cspace, dsc, sRSName, sCategories, sValues)用来将一个Chart绑定到数据源
cspace:OWC.Chart的实例
dsc:数据源
sRSName:记录集名称
sCategories,sValues:Chart中每个系列的名称字段和相应的值的字段名(说的好象不是很清楚,不过看看代码你就明白了)
在使用服务器端的OWC时,实际上和使用其它的组件没什么区别,都是用server.createobject来创建一个实例,再调用组件的方法和属性。
OWC包括四个组件,他们的ProgID分别为:
OWC.Chart:图表组件
OWC.SpreadSheet:电子表格组件
OWC.DataSourceControl:数据源组件
OWC.PivotTable:动态报表组件

最后说一下如何处理临时的图片文件
在ExportChartToGIF汉书中你可以看到如下的代码:
Session("TC:" & sFilePath & sFileName) = sFilePath & sFileName
我们将产生的图片文件路径保存在session中,然后在Session_OnEnd中添加如下的代码:
Set fsoTemp = CreateObject("Scripting.FileSystemObject")
for each imagefile in Session.Contents
if left(imagefile,3) = "TC:" then
fsoTemp.DeleteFile mid(imagefile,4), True
end if
next
set fsoTemp=nothing

 收钱码.jpg

« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。