在某些涉及到报表的项目开发中,可能经常会遇到需要批量的生成某些文档的操作,这些文档若是要点击一下,生成一个的话,就太浪费时间了。但若用FileMakerCtrl控件来实现的话就简单容易的多了。

下面我就以批量转换10Word文档为例来分享一下FileMakerCtrl控件的使用方法。

第一步:请先安装PageOffice的服务器端的安装程序,之后在你的网站或项目的根目录下添加pageoffice文件夹(在PageOffice官方网站的“下载中心”中可下载相应的压缩包,解压之后直接将PageOffice实例代码里的pageoffice文件夹拷贝到根目录下就可以了)。

第二步:在网站或项目中添加文件夹存放word模板文件,我习惯命名为“doc”,将要打开的文件拷贝到该文件夹下,我要转换的文件为“template.doc”,该文件中有一个书签,名称为“PO_company”。

第三步:在网站或项目中创建动态页面FileMaker.aspx。在工具箱中拖动一个FileMakerCtrl控件到页面上(FileMakerCtrl控件位于工具箱最下方)。

FileMaker.aspx.cs后台页面中,添加代码如下:

//设置服务器页面

FileMakerCtrl1.ServerPage= "pageoffice/server.aspx";

string id = Request.QueryString["id"];

if (id != null&&id.Length > 0)

   {

PageOffice.WordWriter.WordDocument doc = newPageOffice.WordWriter.WordDocument();

//禁用右击事件

       doc.DisableWindowRightClick = true;

//给数据区域赋值,即把数据填充到模板中相应的位置

       doc.OpenDataRegion("PO_company").Value = "北京卓正志远软件有限公司  " + id;

//设置保存页面

       FileMakerCtrl1.SaveFilePage = "Savemaker.aspx?id=" + id;

       FileMakerCtrl1.SetWriter(doc);

//设置转换完成后执行的JS函数

      FileMakerCtrl1.JsFunction_OnProgressComplete = "OnProgressComplete()";

//打开文档

          FileMakerCtrl1.FillDocument(Server.MapPath("doc/template.doc"),PageOffice.DocumentOpenType.Word);

}

在前台添加JS函数OnProgressComplete()如下:

function OnProgressComplete() {

       window.parent.myFunc(); //调用父页面(Default.aspx)js函数

}

第四步:在网站或项目中创建动态页面SaveMaker.aspx,保存转换后的Word文档到本地磁盘上,部分代码如下:

//定义FileSaver对象

   PageOffice.FileSaverfs = new PageOffice.FileSaver();

string fileName = "maker"+ id + fs.FileExtName;

//Word文档保存到本地磁盘上

   fs.SaveToFile(Server.MapPath("doc/") + fileName);

fs.Close();

第五步:在网站或项目中创建动态页面Default.aspx。先在页面中嵌套一个<iframe>标签:<iframeid="iframe1"name="iframe1"src=""></iframe>。再在页面中添加一个非服务器端按钮,给其添加一个onclick事件,执行JS函数“ConvertFiles()”。最后在页面中添加一个层,用来作为进度条显示文档的转换进度。部分的Html代码如下:

<!--显示进度条-->

<divid="ProgressBarSide"style="color: Silver;width: 200px; visibility: hidden;position: absolute; text-align: center; left: 40%; top: 50%; margin-top: -32px">

<spanstyle="color: gray; font-size: 12px; text-align: center;">正在转换请稍后...</span><br/>

<divid="ProgressBar"style="background-color: Green;height: 16px; width: 0%; border-width: 1px;

border-style: Solid;">

</div>

</div>

<!--转换按钮-->

<inputid="Button1"type="button"value="批量转换Word文件"onclick="ConvertFiles()"/>

<!—嵌套的iframe-->

<divstyle="width: 0px;height: 0px; overflow: hidden;">

<iframeid="iframe1"name="iframe1"src=""></iframe>

</div>

显示进度条的JS函数myFunc()和开始执行转换文档的JS函数ConvertFiles()如下:

count = 0;//定义转换文件的个数

//显示进度条

   window.myFunc = function(){

   count++;

if (count < 10) {

      document.frames["iframe1"].window.location.href= "FileMaker.aspx?id=" + count;

//设置进度条

   document.getElementById("ProgressBarSide").style.visibility = "visible";

   document.getElementById("ProgressBar").style.width = count + "0%";

} else {

//隐藏进度条div

document.getElementById("ProgressBarSide").style.visibility = "hidden";

       count = 0;

//重置进度条

       document.getElementById("ProgressBar").style.width = "0%";

       document.getElementById("aDiv").style.display = "";

       alert('批量转换完毕!');

}

};


//开始转换文档

function ConvertFiles() {

//第一次让子页面自刷新

   document.frames["iframe1"].window.location.href= "FileMaker.aspx?id=" + count;

}

综上所述,FileMakerCtrl控件使得10Word文档很简单的就转换完成了。