学院首页>网络编程>ASP.NET>ASP.Net实现将Word转换PDF格式

ASP.Net实现将Word转换PDF格式

作者: 来源: 添加时间:2006-5-21 19:47:18

四:使用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系统,回调函数可以不放在类中,以便在窗体程序中调用结果

}

}

}

改写原来的button1_Click事件中的代码

private void button1_Click(object sender, System.EventArgs e)

{

ToPdf my2Pdf = new ToPdf("test.doc","c:\\");

ThreadStart thStartConvert = new ThreadStart(my2Pdf.StartConvertPDF); //开始异步调用线程

thStartConvert.BeginInvoke(new AsyncCallback(my2Pdf.EndConvertPDF),null);//设置异步线程的回调函数

//如果需要转换多个WORD,你可以用循环

//如果是B/S系统,可以将本段代码放在ASPX中,并结合客户端的无刷新显示数据的技术,不断访问WEBService程序,以确定PDF是否转换成功或失败

}

第 2 页,共 3 页 [1] [2] [3]
站内搜索