ThinkPHP仿百度预览

    网上找了很多方法,但都大同小异,可是自己实现起来就有点麻烦,经过多次的修修改改,完成了word-》pdf-》swf,跟swf-》pdf的转换。实现部分需求,希望对大家用帮助,
也希望大神帮忙完善这个在线预览的功能。
<span style="color:#3366FF;">1.下面是Org\Util下的Preview.class.php类代码:</span>
<?php

namespace Org\Util;

/**
 * 
 *1.本预览调用了php内置的Upload类、使用了OpenOffice、pdf2swf软件,php.ini开启了exc、com扩展实现
 *
 *2.只支持microsoft office2003版本转换为pdf,然后转为swf实现预览.3M以上的文件不支持。
 *
 *3.文件上传成功后返回一个数组fileinfo,判断其中的error查看是否成功上传,成功上传后,数组中有原始文件上传名称,
 *  源文件下载路径、预览swf文件路径.
 *
 *4.希望有大神帮忙解决word2007转换的问题,小弟诚心感谢
 **/
class Preview{
	//word转换pdf文档
	private function MakePropertyValue($name,$value,$osm){  
	    $oStruct = $osm->Bridge_GetStruct("com.sun.star.beans.PropertyValue");  
	    $oStruct->Name = $name;  
	    $oStruct->Value = $value;  
	    return $oStruct;  
	}
 
	private function word2pdf($doc_url, $output_url){  
	    $osm = new \COM("com.sun.star.ServiceManager") or die ("确保您安装了OpenOffice软件");  
	    $args = array($this->MakePropertyValue("Hidden",true,$osm));  
	    $oDesktop = $osm->createInstance("com.sun.star.frame.Desktop");  
	    $oWriterDoc = $oDesktop->loadComponentFromURL($doc_url,"_blank", 0, $args);  
	    $export_args = array($this->MakePropertyValue("FilterName","writer_pdf_Export",$osm));  
	    $oWriterDoc->storeToURL($output_url,$export_args);  
	    $oWriterDoc->close(true);
	}
 
	private function word($doc_file,$output_file){
		$doc_file = "file:///" . $doc_file;  
		$output_file = "file:///" . $output_file;
		$this->word2pdf($doc_file,$output_file);
	}
	
	//pdf文档转换swf
	private function pdf2swf($sourcePath,$targetPath){
		header("Content-type: text/html; charset=utf-8"); 
		$pdf2swf='F:/wamp/www/test/swf/pdf2swf.exe';  //pdf格式转换swf格式的程序所在目录
		$argStr=$pdf2swf." -t ".$sourcePath." -s flashversion=9 ".$targetPath; 
		exec($argStr,$out,$status);  //cmd执行命令
		
	}
	public function upload(){
		header( 'Content-Type:text/html;charset=utf-8 ');
		$upload = new \Think\Upload();// 实例化上传类
	    $upload->maxSize   =     3145728 ;// 设置附件上传大小
	    $upload->exts      =     array('pdf', 'doc', 'xls');// 设置附件上传类
	    $upload->savePath  =      './Public/Uploads/'; // 设置附件上传目录
	    // 上传文件
	    $upload->saveName =Date('Y-m-d').'_'.mt_rand();
	    $info   =   $upload->upload();
  		if(!$info){
  			$error=$upload->getError();
  			$fileinfo=array('error'=>$error);
  		}else{
	  		$filename='';
		    $filepath='';
			foreach ($info as $file){
				$name=$file['name'];//文件原始名称
		        $filename=$file['savename'];
		        $filepath=$file['savepath'];
		    }
		    
		    $downloadUrl=$_SERVER['HTTP_CLIENT_IP']."/sky/Uploads".ltrim($filepath,'.').$filename;//文件下载路径
		    $filepath="F:/wamp/www/sky/Uploads".ltrim($filepath,'.');//源文件所在目录
		    $sourcepath=$filepath.$filename;//源文件路径,包括文件名
		    $path_parts= pathinfo($sourcepath);
  		 	if ($path_parts['extension']=='pdf'){
		    	$source=$filepath.$path_parts['filename'].'.swf';
				$this->pdf2swf( $sourcepath,$source);
		    }elseif($path_parts['extension']=='doc' or $path_parts['extension']=='docx' or $path_parts['extension']=='xls'){ 
				$output_file=$filepath.$path_parts['filename'].'.pdf';
				$this->word($sourcepath,$output_file);
				$source=$filepath.$path_parts['filename'].'.swf';
				$this->pdf2swf($output_file,$source);			
		    }
		   $fileinfo=array(
		   	'error'=>'成功',
  			'name'=>$name,	//原文件上传名称
		    'previewUrl'=>$source, //预览swf文件路径
		    'downloadUrl'=>$downloadUrl,//原文件下载路径
  			);
  		}
  		return $fileinfo;//文件上传转换为swf所在的路径
	}
}

2.下面是控制器中调用上面的预览(Preview.class.php)方法:

public function upload(){
		$preview=new \Org\Util\Preview();
		$arr=$preview->upload();
		if($arr['error']==='成功'){
			
		}else{
			$this->error($arr['error']);
		}
	}


3.下面是flexpaper展示时的方法:

public function flexpaper(){
		$path=$_GET['filepath'].$_GET['filename'];
		$path_parts=pathinfo($path);
		$pathall='/'.ltrim($path_parts['dirname'],'F:/wamp/www/').'/'.$path_parts['filename'].'.swf';
		$this->assign('path',$pathall);
		$this->display();
	}


4.flexpaper的展示页面:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" type="text/css" href="__PUBLIC__/tools/flexpaper/css/flexpaper.css">
<script type="text/javascript" src="__PUBLIC__/tools/flexpaper/js/jquery.min.js"></script>
<script type="text/javascript" src="__PUBLIC__/tools/flexpaper/js/jquery.extensions.min.js"></script>
<script type="text/javascript" src="__PUBLIC__/tools/flexpaper/js/flexpaper.js"></script>
<script type="text/javascript" src="__PUBLIC__/tools/flexpaper/js/lexpaper_handlers.js"></script>
<style>
	html, body	{ height:100%; }
	body { margin:0; padding:0; overflow:auto; }   
	#flashContent { display:none; }
</style> 
</head>
<body>
 <div id="documentViewer" class="flexpaper_viewer" style="position:absolute;left:10px;top:10px;width:100%;height:100%"></div>

        <script type="text/javascript">
            function getDocumentUrl(document){
                return "__PUBLIC__/tools/flexpaper/view.php?doc={doc}&format={format}&page={page}".replace("{doc}",document);
            }
            var startDocument = "Paper";

            $('#documentViewer').FlexPaperViewer(
                   { config : {

                     SWFFile : '<{$path}>',
                     
                     Scale :0.6,			//初始化缩放比例,参数值应该是大于零的整数
                     ZoomTransition : 'easeOut',//Flexpaper中缩放样式,默认参数值为easeOut.其他可选值包括: easenone, easeout, linear, easeoutquad
                     ZoomTime : 0.5,//从一个缩放比例变为另外一个缩放比例需要花费的时间,该参数值应该为0或更大
                     ZoomInterval : 0.1,//缩放比例之间间隔,默认值为0.1,该值为正数。
                     FitPageOnLoad : true,//初始化得时候自适应页面,与使用工具栏上的适应页面按钮同样的效果。
                     FitWidthOnLoad:true,//初始化的时候自适应页面宽度,与工具栏上的适应宽度按钮同样的效果。
                     FullScreenAsMaxWindow :true,//
                     ProgressiveLoading : false,
                     MinZoomSize : 0.2,
                     MaxZoomSize :1,
                     SearchMatchAll : false,
                     InitViewMode : 'Portrait',
                     RenderingOrder : 'flash,html',
                     StartAtPage : '',

                     ViewModeToolsVisible : true,
                     ZoomToolsVisible : true,
                     NavToolsVisible : true,
                     CursorToolsVisible : true,
                     SearchToolsVisible : false,
                     WMode : 'transparent',
                     localeChain: 'zh_CN'//设置地区(语言),目前支持以下语言。默认en_US (English)
                   }}
            );
        </script>

</body>
</html>


最后,快要过年了,祝大家新年快乐,明年生活更美好。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值