快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

利用OWC服务器端组件动态生成图表

以前在这里也曾经有一些文章谈到了在ASP中生成动态图表的问题,但那些文章中所谈到的一些方式都有某些方面的限制,如需要在客户端安装office2000或安装OWC,有些则可能在Intranet中使用时没什么问题,但在通过Internet访问的时候,就可能出现无法正常工作的现象(这主要和SQL Server的安全设置有关)。那么,我们如何来避免这些问题呢?有一个很好的方式,就是将在ASP中生成的图表转变成图片文件保存在服务器上,这样用户最终看到的是GIF图片格式的图表,我想现在的任何一种浏览器在观看GIF图片的时候都没什么问题吧。:)也许唯一可能的问题就是如何对这些生成的临时图片文件的处理问题,关于这个问题在最后我们会讨论。
下面我们会用一个详细的实例来说明这种方式。程序的测试环境为:
NT4.0(SP5)+IIS4.0+SQL Server7.0+IE5.0,要运行下面的ASP程序,请将下面的代码Copy,保存到你的一个虚拟目录中,在这个虚拟目录中建立一个子目录tmp(你可能修改代码中的路径以符合自己的路径),在IIS中设置read权限即可,注重了,在NT上你必须设置此tmp目录对IUSR_servername用户至少有Change的权限。建立一个pubs的DSN指向SQL Server的pubs数据库。
以下是代码:
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
%>

<br><br>
<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

好了。终于写完了,其中关于临时文件的处理的方式也许不是很好,假如你有更好的方式的话,请告诉我。希望这篇文章对大家都所帮助:)
返回类别: 教程
上一教程: 连接数据库常用的连接字符串
下一教程: 网页的结构化与模块化

您可以阅读与"利用OWC服务器端组件动态生成图表"相关的教程:
· 构建稳定的服务器端组件的七个步骤
· 使用XMLDOM在服务器端生成静态HTML页面
· 利用ADODB.STREAM使用浏览器下载服务器文件
· 一个用组件动态创建EXCEL文件的实例
· 用SOAP和ASP进行服务器端更新
    微笑服务 优质保证 索取样品