windows 下 php 实现在线预览附件(pdf)
(写的有点啰嗦,具体的实现方法只是粗体和代码就够了)
给市场部门用dede做个cms,需要附件在线查看。公司有个系统(就叫develop_cms吧)是已经实现的,本以为很容易,不过是下一个插件然后把附件的路径传进去就可以了,哪知道,远没有我想象的那么简单。就简单记录一下最后实现的方法吧。
- google了一下,下载了flexpaper,里面一堆东西看着就吓了一跳。也有很多相关的文章,但基本都只是分析flexpaper的参数和自带的demo,可以预览swf,其实工作原理是把文档转换成swf然后预览的………………
- flexpaper有个配置页面,如下,需要安装swftools,里面有个pdf2swf,用来将pdf格式转换成swf
- php目录里估计就是调用pdf2swf转换格式的,各种复杂,看的头都大了。develop_cms里的实现方法很简单,用exec执行一段命令行就搞定(当然不同格式不同对待),但是这个系统是在linux上,命令不一样。于是在cmd相下试了一下,
C:\Program Files\swftools\pdf2swf.exe -t C:\117.pdf -s flashversion=9 -o C:\117.swf
好神奇,转换成功~将转换后的swf放到flexpaper里调用,果然可以显示·
- 用exec()函数执行以上命令,没有反应,先cd C:\Program Files\swftools\,还是不行,用exec('dir')查看当前目录发现cd没有效果,于是把pdf2swf.exe(是的,只有这一个文件)放到F盘网站目录里,done! php代码如下
$dir = dirname(__FILE__) . "\\flexpaper"; $source = str_replace('plus\\flexpaper','uploads\\inner\\', $dir) . $file_name; $convert = $dir . "\\docs\\{$file_name}.swf"; $command = $dir . "\\exe\\pdf2swf.exe -t \"{$source}\" -s flashversion=9 -o \"{$convert}\""; $re; exec($command,$re,$re);
- 当然还有js的配置
<link rel="stylesheet" type="text/css" href="/flexpaper/css/flexpaper.css" /> <script type="text/javascript" src="/flexpaper/js/flexpaper.js"></script> <script type="text/javascript" src="/flexpaper/js/flexpaper_handlers.js"></script> <div id="documentViewer" class="flexpaper_viewer" style="width:100%;height:500px;"></div> <script type="text/javascript"> $('#documentViewer').FlexPaperViewer( { config : { SWFFile : , //转换后的swf路径 jsDirectory : '/flexpaper/js/', Scale : 0.6, ZoomTransition : 'easeOut', ZoomTime : 0.5, ZoomInterval : 0.2, FitPageOnLoad : true, FitWidthOnLoad : false, FullScreenAsMaxWindow : false, ProgressiveLoading : false, MinZoomSize : 0.2, MaxZoomSize : 5, SearchMatchAll : false, InitViewMode : 'Portrait', RenderingOrder : 'flash', StartAtPage : '', ViewModeToolsVisible : true, ZoomToolsVisible : true, NavToolsVisible : true, CursorToolsVisible : true, SearchToolsVisible : true, WMode : 'window', localeChain: 'en_US' }} ); </script>
- office等需要另外的软件来转换,暂时还没搞
拖了两周终于写完了,继续加油~