在某些涉及到报表的项目开发中,可能经常会遇到需要批量的生成某些文档的操作,这些文档若是要点击一下,生成一个的话,就太浪费时间了。但若用PageOffice开发平台中的FileMakerCtrl控件来实现的话就简单容易的多了。
下面我就以批量生成10个Word文档为例来分享一下FileMakerCtrl控件的使用方法。
第一步:请先安装PageOffice的服务器端的安装程序,之后在你的网站或项目的根目录下添加pageoffice文件夹(在
http://www.zhuozhengsoft.com网站的“下载中心”中可下载相应的压缩包,解压之后直接将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 = new PageOffice.WordWriter.WordDocument();
    //
给数据区域赋值,即把数据填充到模板中相应的位置
    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.FileSaver fs = new PageOffice.FileSaver();
   string fileName = "maker" + id + fs.FileExtName;
   //
将Word文档保存到本地磁盘上
   fs.SaveToFile(Server.MapPath("doc/") + fileName);
   fs.Close();
第五步:在网站或项目中创建动态页面Default.aspx。先在页面中嵌套一个<iframe>标签:<iframe id="iframe1" name="iframe1" src=""></iframe>。再在页面中添加一个非服务器端按钮,给其添加一个onclick事件,执行JS函数“ConvertFiles()”。最后在页面中添加一个层,用来作为进度条显示文档的生成进度。部分的Html代码如下:
   <!--显示进度条-->
   <div id="ProgressBarSide" style="color: Silver; width: 200px; visibility: hidden;position:   absolute; text-align: center; left: 40%; top: 50%; margin-top: -32px">
   <span style="color: gray; font-size: 12px; text-align: center;">正在生成请稍候
...</span><br />
   <div id="ProgressBar" style="background-color: Green; height: 16px; width: 0%; border-width: 1px;
   border-style: Solid;">
   </div>
   </div>
   <!--生成按钮
-->
   <input id="Button1" type="button" value="批量生成Word文件 
" οnclick="ConvertFiles()" />
   <!—嵌套的
iframe-->
   <div style="width: 0px; height: 0px; overflow: hidden;">
   <iframe id="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.getElementByIdx_x_x("ProgressBarSide").style.visibility = "visible";
    document.getElementByIdx_x_x("ProgressBar").style.width = count + "0%";

} else {
    //
隐藏进度条div
    document.getElementByIdx_x_x("ProgressBarSide").style.visibility = "hidden";
    count = 0;
    //重置进度条

    document.getElementByIdx_x_x("ProgressBar").style.width = "0%";
    document.getElementByIdx_x_x("aDiv").style.display = "";
    alert(&apos;
批量生成完毕!&apos;);}};

//开始生成文档
    function ConvertFiles() {
    //
第一次让子页面自刷新
    document.frames["iframe1"].window.location.href = "FileMaker.aspx?id=" + count;}
综上所述,FileMakerCtrl控件使得10个Word文档很简单的就生成完成了,上述示例的完整代码可在卓正网站(
http://www.zhuozhengsoft.com)的下载中心免费下载查看。