|
你可以安照该脚本改写成,支持多个参数,使用FOR循环,一次转换多个WORD文档,此处没有使用多个文件转换功能,是考虑到,该段脚本放在C#的线程中执行,这样一来也可以转换多个WORD文档.
四:使用C#调用ConvertDoc2PDF.js脚本
新建一个C#的WINDOWS应用程序,添加一个按钮button1
添加一个函数,函数名StartConvertPDF
以下是引用片段: public void StartConvertPDF() { Process proc = new Process(); proc.StartInfo.FileName = "cmd.exe"; proc.StartInfo.WorkingDirectory = @"c:\"; proc.StartInfo.CreateNoWindow = true; proc.StartInfo.UseShellExecute = false; proc.StartInfo.RedirectStandardInput = true; //输入重定向 proc.Start(); proc.StandardInput.WriteLine(@"cscript //nologo c:\ConvertDoc2PDF.js c:\test.doc c:\"); proc.StandardInput.WriteLine("exit"); proc.WaitForExit(); } |
然后在按钮的CLICK事件中添加调用线程的代码
以下是引用片段: private void button1_Click(object sender, System.EventArgs e) { //定义线程序 Thread thConvert = new Thread(new ThreadStart(StartConvertData)); thConvert.Start(); } |
注意:在测试上面的C#程序时,必须添加如下命名空间
using System.Diagnostics;
using System.Threading;
五:健壮的C#调用代码(实际考虑,可放在B/S系统中)
完成第4步的C#测试后,细心的读者,可能看到一点问题,那就是如何得到脚本运行后输出的结果,如何给线程中调用的StartConvertData方法传递参数
1:传递参数,此话说来也可用一篇教程告诉大家线程中方法如何来传递参数,现在就讲一个方案,此种方案很多,我采用一个类,初始化这个类,然后调用该类的方法作为线程执行的方法
2:得到脚本的输出结果,使用Process对象的输出重定向,就是说改变输出方向,使脚本不输出到控制台(MS-DOS窗口),而是重定向输出到C#程序中,并采用线程的异步回调方法,显示脚本运行结果。
添加一个新类,类名为ToPdf
以下是引用片段: using System; using System.Diagnostics; using System.ComponentModel; using System.Windows.Forms; using System.Data; namespace Doc2Pdf { public class ToPdf { private string strWord = "";//此处的WORD文件不含路径 private string sPath = ""; public string sExecResult = ""; public bool bSuccess = false; public ToPdf(string sParamWord,string sParamPath) { strWord = sParamWord; sPath = sParamPath; } public void StartConvertPDF() { Process proc = new Process(); proc.StartInfo.FileName = "cmd.exe"; proc.StartInfo.WorkingDirectory = sPath; proc.StartInfo.CreateNoWindow = true; proc.StartInfo.UseShellExecute = false; proc.StartInfo.RedirectStandardInput = true;//标准输入重定向 proc.StartInfo.RedirectStandardOutput = true;//标准输出重定向 proc.Start(); proc.StandardInput.WriteLine("cscript //nologo "+sPath+"ConvertDoc2PDF.js "+sPath+strWord+ " "+sPath); proc.StandardInput.WriteLine("exit"); sExecResult = proc.StandardOutput.ReadToEnd();//返回脚本执行的结果 proc.WaitForExit(); proc.Close(); } public void EndConvertPDF(System.IAsyncResult ar)//ar参数必须写,是线程执行完成后的回调函数 { if(sExecResult.IndexOf("isuccess")!=-1)bSuccess=true; else if(sExecResult.IndexOf("isfail")!=-1)bSuccess=false; //如果放在B/S系统,你可以在此处写数据库,是成功还是失败,并用一个WEBService程序不断检查数据库,此WEBService程序不放在该回调用函数中 //如果放在C/S系统,回调函数可以不放在类中,以便在窗体程序中调用结果 } } } |
上一页 [1] [2] [3] 下一页 |