大家好,关于手机swf网站源码分享很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于swf手机能打开吗的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!
在项目开发过程中,有时会需要用到调用第三方程序实现本系统的某一些功能,例如本文中需要使用到的swftools插件,那么如何在程序中使用这个插件,并且该插件是如何将PDF文件转化为SWF文件的呢?接下来就会做一个简单的介绍。
在.NET平台中,对C中使用Process类可以提供对本地和远程的访问进程,使能够启动和停止系统进程,并且该类可以对系统进程进行管理。该类中的一些常用方法:Start,Kill,WaitForExit等方法;StartInfo,FileName,CreateNoWindow等属性。
1.Start方法:启动(或重用)此Process组件的StartInfo属性指定的进程资源,并将其与该组件关联。如果启动了进程资源,则为true;如果没有启动新的进程资源(例如,如果重用了现有进程),则为false。
具体介绍一下该方法的实现代码:
///<devdoc>\n///<para>///<seecref=’System.Diagnostics.Process’/>如果过程资源被重用而不是启动,重用的进程与此相关联<seecref=’System.Diagnostics.Process’/>零件。///</para>///</devdoc>
[ResourceExposure(ResourceScope.None)]\n[ResourceConsumption(ResourceScope.Machine,ResourceScope.Machine)]\npublicboolStart{\nClose;\nProcessStartInfostartInfo=StartInfo;\nif(startInfo.FileName.Length==0)\nthrownewInvalidOperationException(SR.GetString(SR.FileNameMissing));\n\nif(startInfo.UseShellExecute){\nelse\nthrownewInvalidOperationException(SR.GetString(SR.net_perm_invalid_val,”StartInfo.UseShellExecute”,true));\nifDEBUG\nif(processTracing.TraceVerbose){\nStackFramecalledFrom=newStackTrace(true).GetFrame(0);\nDebug.WriteLine(“calledfrom”+calledFrom.GetFileName+”,line”+calledFrom.GetFileLineNumber);\n}\nif!FEATURE_PAL\nhandle=ProcessManager.OpenProcess(processId,access,throwIfExited);\nendif//!FEATURE_PAL\nif(throwIfExited&&(access&NativeMethods.PROCESS_QUERY_INFORMATION)!=0){\nif(NativeMethods.GetExitCodeProcess(handle,outexitCode)&&exitCode!=NativeMethods.STILL_ACTIVE){\nthrownewInvalidOperationException(SR.GetString(SR.ProcessHasExited,processId.ToString(CultureInfo.CurrentCulture)));\n}\n}\nreturnhandle;\n}\n\n}
3.WaitForExit方法:指示<seecref=’System.Diagnostics.Process’/>组件等待指定的毫秒数,以使相关联的进程退出。
具体介绍一下该方法的实现代码:
publicboolWaitForExit(intmilliseconds){\nSafeProcessHandlehandle=null;\nboolexited;\nProcessWaitHandleprocessWaitHandle=null;\ntry{\nhandle=GetProcessHandle(NativeMethods.SYNCHRONIZE,false);\nif(handle.IsInvalid){\nexited=true;\n}\nelse{\nprocessWaitHandle=newProcessWaitHandle(handle);\nif(processWaitHandle.WaitOne(milliseconds,false)){\nexited=true;\nsignaled=true;\n}\nelse{\nexited=false;\nsignaled=false;\n}\n}\n}\nfinally{\nif(processWaitHandle!=null){\nprocessWaitHandle.Close;\n}\n\n//Ifwehaveahardtimeout,wecannotwaitforthestreams\nif(output!=null&&milliseconds==-1){\noutput.WaitUtilEOF;\n}\n\nif(error!=null&&milliseconds==-1){\nerror.WaitUtilEOF;\n}\n\nReleaseProcessHandle(handle);\n\n}\n\nif(exited&&watchForExit){\nRaiseOnExited;\n}\n\nreturnexited;\n}
internalProcessWaitHandle(SafeProcessHandleprocessHandle):base{\nSafeWaitHandlewaitHandle=null;\nboolsucceeded=NativeMethods.DuplicateHandle(\nnewHandleRef(this,NativeMethods.GetCurrentProcess),\nprocessHandle,\nnewHandleRef(this,NativeMethods.GetCurrentProcess),\noutwaitHandle,\n0,\nfalse,\nNativeMethods.DUPLICATE_SAME_ACCESS);\n\nif(!succeeded){\nMarshal.ThrowExceptionForHR(Marshal.GetHRForLastWin32Error);\n}\n\nthis.SafeWaitHandle=waitHandle;\n}
4.StartInfo属性:获取或设置要传递给Process的Start方法的属性。StartInfo表示用于启动进程的一组参数。调用Start时,StartInfo用于指定要启动的进程。唯一必须设置的StartInfo成员是FileName属性。
具体介绍一下该方法的实现代码:
[Browsable(false),DesignerSerializationVisibility(DesignerSerializationVisibility.Content),MonitoringDescription(SR.ProcessStartInfo)]\npublicProcessStartInfoStartInfo{\nget{\nif(startInfo==null){\nstartInfo=newProcessStartInfo(this);\n}\nreturnstartInfo;\n}\n[ResourceExposure(ResourceScope.Machine)]\nset{\nif(value==null){\nthrownewArgumentNullException(“value”);\n}\nstartInfo=value;\n}\n}
5.CreateNoWindow属性:获取或设置指示是否在新窗口中启动该进程的值。
具体介绍一下该方法的实现代码:
[\nDefaultValue(false),\nMonitoringDescription(SR.ProcessCreateNoWindow),\nNotifyParentProperty(true)\n]\npublicboolCreateNoWindow{\nget{returncreateNoWindow;}\nset{createNoWindow=value;}\n}
以上简单介绍了该类的三种常用方法和两种常用属性,在实际的开发项目中无须对每个属性方法和属性的底层实现做全面的了解,但建议在学习该类的时候,适当的了解一下某一些类的方法实现,有助于我们很好的掌握该类。
二.如何实现PDF文件转化为SWF文件
在项目如果需要将PDF文件转换为SWF文件,可以在项目中引入Swftools插件,该插件的主要功能:PDF到SWF转换器。每页生成一帧。使您能够在FlashMovie中拥有完全格式化的文本,包括表格,公式,图形等。它基于DerekB.Noonburg的xpdfPDF解析器。
简单介绍一下该插件的常用参数:
-h,–helpPrintshorthelpmessageandexit打印帮助信息
-V,–versionPrintversioninfoandexit打印版本号
-o,–outputfile.swfDirectoutputtofile.swf.Iffile.swfcontains‘13568621′(file13568630.swf),theneachpage指定输出的swf文件名
-P,–passwordpasswordUsepasswordfordecipheringthepdf.指定打开pdf的密码
-z,–zlibUseFlash6(MX)zlibcompression.使用Flash6的zlib压缩机制
-i,–ignoreAllowspdf2swftochangethedraworderofthepdf.Thismaymakethegenerated允许程序修改pdf的绘制顺序,可能会导致结果与原来有差异
以上是几种常用的参数,具体擦参数列表详见:http://www.swftools.org/。
对实现本次操作的类和插件做了一个简单的介绍,接下来提供一个具体实现该功能的操作方法:
///<summary>\n///PDF格式转为SWF\n///</summary>\n///<paramname=”pdfPathParameter”>原视频文件地址,如/a/b/c.pdf</param>\n///<paramname=”swfPathParameter”>生成后的FLV文件地址,如/a/b/c.swf</param>\n///<paramname=”beginpage”>转换开始页</param>\n///<paramname=”endpage”>转换结束页</param>\n///<paramname=”photoQuality”>照片质量</param>\n///<returns></returns>\npublicstaticboolPdfConversionSwf(stringpdfPathParameter,stringswfPathParameter,intbeginpage,intendpage,intphotoQuality)\n{\nif(string.IsNullOrEmpty(pdfPathParameter))\n{\nthrownewArgumentNullException(pdfPathParameter);\n}\nif(string.IsNullOrEmpty(swfPathParameter))\n{\nthrownewArgumentNullException(swfPathParameter);\n}\nif(endpage<beginpage)\n{\nthrownewArgumentException(“起始页数大于结束页数”);\n}\nif(photoQuality<=0)\n{\nthrownewArgumentException(“照片质量错误”);\n}\nvarexe=HttpContext.Current.Server.MapPath(“~/tools/swftools-2013-04-09-1007.exe”);\nvarpdfPath=HttpContext.Current.Server.MapPath(pdfPathParameter);\nvarswfPath=HttpContext.Current.Server.MapPath(swfPathParameter);\nProcessp=null;\ntry\n{\nif(!File.Exists(exe)||!File.Exists(pdfPath))\n{\nreturnfalse;\n}\nif(File.Exists(swfPath))\n{\nFile.Delete(swfPath);\n}\nvarsb=newStringBuilder;\nsb.Append(“\\””+pdfPath+”\\””);\nsb.Append(“-o\\””+swfPath+”\\””);\nsb.Append(“-sflashversion=9”);\nsb.Append(“-sdisablelinks”);\nif(endpage>GetPageCount(pdfPath))\n{\nendpage=GetPageCount(pdfPath);\n}\nsb.Append(“-p”+”\\””+beginpage+””+”-“+endpage+”\\””);\n//SWF中的图片质量\nsb.Append(“-j”+photoQuality);\nvarcommand=sb.ToString;\n//Process提供对本地和远程的访问进程,使能够启动和停止系统进程。\np=newProcess\n{\nStartInfo=\n{\nFileName=exe,\nArguments=command,\nWorkingDirectory=HttpContext.Current.Server.MapPath(“~/Bin/”),\nUseShellExecute=false,\nRedirectStandardError=true,\nCreateNoWindow=false\n}\n};\n//启动线程\np.Start;\n//开始异步读取\np.BeginErrorReadLine;\n//等待完成\np.WaitForExit;\n//开始同步读取\n//p.StandardError.ReadToEnd;\nif(!File.Exists(swfPath))\nreturnfalse;\nreturntrue;\n}\ncatch(IOExceptionioex)\n{\nthrownewIOException(ioex.Message);\n}\ncatch(Exceptionex)\n{\nthrownewException(ex.Message);\n}\nfinally\n{\nif(p!=null)\n{\n//关闭进程\np.Close;\n//释放资源\np.Dispose;\n}\n}\n\n}
三.小结
在本文中介绍了在C#中如何操作外部程序和线程的类System.Diagnostics.Process,并介绍了该类的一些常用方法的底层实现代码,如果需要对该类进行详细的了解,可以根据MSDN和.NET底层源码的相关注释和文章进行细致的学习。在介绍完实现操作的类的同时,也对Swftools插件做了一个说明,并列举了相关的参数,如果在项目中有较高的要求,可以根据官方提供的API文档进行重构。
在项目开发中,任何一个功能是无法做法完成所有的功能,在编码功能时,只能尽可能的考虑到方法的通用性,在理解了某一个类和某一个插件的基本原理和使用方法后,可以根据对应的API进行添加新功能。
文章分享结束,手机swf网站源码分享和swf手机能打开吗的答案你都知道了吗?欢迎再次光临本站哦!
