由于项目需求需要实现pdf文档的上传并在线阅读,在网上看了很多关于html在线阅读pdf文档的文章,遇到各种问题,包括不同浏览器之间,同一个浏览器不同版本等问题,最终没有实现。后来就换了一个思路,用flex实现pdf的在线阅读,但是flex不能实现直接阅读pdf(对我而言不行),于是了解到可以通过将pdf转swf之后再实现阅读。下面就来看看实现具体过程:
1,实现pdf转为swf;
2,flex实现swf文件的在线浏览;
3,html内嵌flex实现pdf在线浏览。
1,pdf转swf
(1)要实现pdf转为swf用到的是pdf2swf这个转换工具。用到这个工具就需要调用进程pdf2swf.exe这个执行程序了,当然在调用的时候需要传入一些参数。
参数设置代码如下:
StringBuilder sb = new StringBuilder();
sb.Append(" -o \"" + swfPath + "\"");//转换的swf的保存路径
sb.Append(" -z");
sb.Append(" -s languagedir=");//设置语言
sb.Append(" -s flashversion=9");//flash 版本
sb.Append(" -s disablelinks");//禁止PDF里面的链接
sb.Append(" -p " + "1" + "-" + GetPageCount(pdfPath));//获取pdf的页数
sb.Append(" -j 100");//图片质量
sb.Append(" \"" + pdfPath + "\"");//pdf的路径
调用转换工具:
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo.FileName = name;//pdf2swf.exe的绝对路径
proc.StartInfo.Arguments = args.ToString();//参数
proc.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
proc.Start();
proc.WaitForExit();
proc.Close();
好了,这就是实现了pdf转为swf了。
2,flex实现swf的在线浏览
这个就比较简单了,直接使用空间<mx:SWFLoader>,通过控件的sourse属性来绑定数据;
3,实现html内嵌flex并传参数
html页面代码
var html = "";
html += ‘<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id="test" width="100%" height="100%">‘;
html += ‘<param name="movie" value=file.swf?lan=zh_CN&theme=blue" />‘;//flex页面的路径
html += ‘<param name="quality" value="high" />‘;
html += ‘<param name="bgcolor" value="#869ca7" />‘;
html += ‘<param name="flashVars"‘+‘ value="name=‘+name+‘" />‘;//传入的参数
html += ‘<param name="allowScriptAccess" value="always" />‘;
html += ‘<embed src="file.swf?lan=zh_CN&theme=blue" flashvars="name=‘+name+‘" quality="high" bgcolor="#869ca7" width="500" height="400" allowScriptAccess="always" name="test" align="middle" play="true" loop="false" qiality="high" type="application/x-shockwave-flash" pluginpage="http://www.adobe.com/go/getfalshplayer" >‘;
html += ‘</embed>‘;
html += ‘</object>‘;