扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
var files = WScript.Arguments; var fso = new ActiveXObject("Scripting.FileSystemObject"); var word = new ActiveXObject("Word.Application"); var PDF = new ActiveXObject("PDFDistiller.PDFDistiller.1"); word.ActivePrinter = "MS Publisher Color Printer"; //files(0) 为WORD文档文件名 //files(1) 为,转换后需要保存的路径 //调用fso.GetBaseName(files(0))后,为无路径,无扩展名,的文件名 //files.length为文件参数的个数,使用循环可以支持多个WORD文档的转换 var docfile = files(0); var psfile = files(1) + fso.GetBaseName(files(0)) + ".ps"; var pdffile = files(1) + fso.GetBaseName(files(0)) + ".pdf"; var logfile = files(1) + fso.GetBaseName(files(0)) + ".log"; try{ var doc = word.Documents.Open(docfile); //WORD文件转成PS文件; word.PrintOut(false, false, 0, psfile); doc.Close(0); //PS文件转成PDF文件; PDF.FileToPDF(psfile,pdffile,""); fso.GetFile(psfile).Delete();//删除PS脚本文件 fso.GetFile(logfile).Delete();//删除转换的日志文件 word.Quit(); WScript.Echo("isuccess");//成功 WScript.Quit(0); } catch(x) { word.Quit(); WScript.Echo("isfail");//失败 WScript.Quit(0); } |
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(); } |
private void button1_Click(object sender, System.EventArgs e) { //定义线程序 Thread thConvert = new Thread(new ThreadStart(StartConvertData)); thConvert.Start(); } |
using System.Diagnostics; using System.Threading; |
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系统,回调函数可以不放在类中,以便在窗体程序中调用结果 } } } |
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是否转换成功或失败 } |
//以下给出,泛代码,用户按照自己的需求,填写完整即可 //bool bStart为全局变量,控制循环的进入与退出 //例:18:30开始检查并转换,那么18:30时,bStart=true;并启动转换线程 //6:30停止转换线程,bStart=fasle; private void CheckData2Convert() { //检查指定目录下的没有转换的WORD文档,你同样可以检查数据库中记录的没有转换的WORD文档 string sPath = System.Threading.Thread.GetDomain().BaseDirectory; //当前的路径 while(bStart) { int iFileCount = CheckWord(); //CheckWord为一个方法,检查当前没有转换的WORD文档,返回没有转换的文件数,该方法的代码由读者自己编写 for(int i=0;i<iFileCount;i++) { string sWord = GetWordFileName(i) //GetWordFileName为一个方法,返回一个不带路径的WORD文件名,该方法的代码由读者自己编写 //ToPdf类中的StartConvertPDF()方法使用的是不带路径的WORD文件名 ToPdf my2Pdf = new ToPdf(sWord ,sPath); my2Pdf.StartConvertPDF(); if(my2Pdf.sExecResult.IndexOf("isuccess")!=-1) { //成功,写日志,或回写数据库 } else if(my2Pdf.sExecResult.IndexOf("isfail")!=-1) { //失败,写日志,或回写数据库 } } if(!bStart)break; Thread.Sleep(1000); } } |
protected override void OnStart(string[] args) { //可以使用一个开始定时器,检查是否到开始时间,时间一到,就开始执行线程,此处的开始执行线程可以放在开始定时事件中 //可以使用一个结束定时器,检查是否到结束时间,时间一到,就结束线程,结束线程的代码可以放在结束定时事件中 //注意:应该使用组件中的定时器,而不是Windows的FORMS中的定时器 //该定时器的类名为System.Timers.Timer,千万别搞错,不然执行不会正常的 bStart = true; Thread thConvert = new Thread(new ThreadStart(StartConvertData)); thConvert.Start(); } |
protected override void OnStop() { bStart = false; //为何次处不停止线程呢,因为考虑到,现在线程正在转换WORD文档,但没有结束,所以只设置停止标识,转换完成后,线程也执行结束了. } |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者