在做一个仿百度文库的项目,上传文档后转为相关的SWF,基本思路是上传文档后调用CMD命令使用FlashPaper2.2把上传的文档转为相对应的SWF预览文件,命令如下:
FlashPrinter.exe 源文件路径 -o 目标SWF文件路径
相关.NET代码如下:
string file_storage = "d:\aaa.docx";
string file_bowze = Server.MapPath("~/swf/aaa.swf"); //转换为SWF格式后存放的路径
string flash_file = Server.MapPath("~/FlashPaper2.2/FlashPrinter.exe");
string input = string.Format("{0} {1} -o {2}", flash_file, file_storage, file_bowze); //类似于在DOS界面要输入的内容
Process pro = new Process();
pro.StartInfo.FileName = "cmd"; //调用CMD线程
pro.StartInfo.UseShellExecute = false;
pro.StartInfo.RedirectStandardInput = true; //注册输入指向
pro.StartInfo.RedirectStandardOutput = true; //注册输出指向
pro.StartInfo.CreateNoWindow = true; //不建新窗口,这个属性可以根据需要自己设定
pro.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; //隐藏窗口
pro.Start();
pro.StandardInput.WriteLine(input); //将内容写到DOS ---个人是这么理解的
pro.StandardInput.WriteLine("exit");
pro.WaitForExit(6000);
string output = pro.StandardOutput.ReadToEnd(); //这句一定要加,输出转换好的SWF格式文件到指定位置 ,我一开始没加怎么都得不到文件;
pro.Close(); //关掉线程
以上转换代码在本机测试jpg,txt,pdf,doc,docx,ppt,pptx,xls,xlsx文档全部转换成功,把项目上传到服务器上后,发现除xls,xlsx文档之外其他的文档也全都能成功转换成swf,在网上搜索了好久的解决方法,包括更改权限,DCOM组件权限等都试过了,都还是不能xls,xlsx转成swf格式的,
FlashPrinter.exe 源文件路径 -o 目标SWF文件路径
这个命令直接在服务器上的CMD下执行也是能成功转换的,想了好久,突然想到,在本地转换xls,xlsx的时候,弹出excel了,弹出flashpager了,flashpager转换完后关闭Excel的时候,弹出个保存的对话框,
这时候我查看了一下生成SWF的目录,发现还没有生成相关的SWF,当我点击是或者否的时候该excel文档对应的swf就生成了.
由此而想到那在服务器上是不是也是因为这个问题,在cmd中执行转换命令后,弹出excel窗口了,关闭的时候没人去按那个是或者否,所以就导致了在服务器上的excel一直没办法生成对应的swf,.
于是我就想在代码中执行了转换命令后再执行一个强制关闭excel进程的命令
pro.StandardInput.WriteLine("taskkill /f /im excel.exe /t");
结果经测试,还是不行,程序就卡在那个转换命令那里了,如果在卡的时候到服务器上打开任务管理器把excel进行手动结果之后,程序又能正常运行了,但是对应的swf文件还是没有生成成功,请教大家这个问题应该怎么解决 ? 或者还有另一种新的方法生成对应的swf?
sewfewr