一、介绍
1.目前前端只能实现在线预览pdf格式的文件,可以用pdf.js或者jquery.media.js来实现。
2.要实现其他格式的文件预览,需要在后端进行格式转换。
二、具体步骤
1.目前我了解到的后端对office文档格式的转换方法有:
a、先转换成swf格式->在转换成pdf格式
b、借用第三方工具,如openoffice,通过其给的接口,用php后者java或者c#来实现.
2.我用的的是上面提到的第二种方法,下面进行详细介绍。
a、首先下载openoffice软件,下载链接
b、oppenoffice权限设置
1、cmd 运行Dcomcnfg.exe->组件服务->计算机->我的电脑->DCOM配置->OpenOffice Service Manager
2、右键选择属性
3、设置步骤图示
c、php环境及配置(开启php中com组件服务)
php环境我用的是xampp集成环境,php版本为5.6.21
具体配置:到php.ini中打开com选项 com.allow_dcom = true
PS:PHP 5.4.5后,com/dotnet 模块已经成了单独的扩展,所以需要在PHP.ini中配置extension=php_com_dotnet.dll ,如果PHP VERSION<5.4.5 则不需要。
三、格式转换代码实现
<?php
class office2pdf
{
private $osm;
public function __construct()
{
$this->osm = new COM("com.sun.star.ServiceManager")or die ("Please be sure that OpenOffice.org is installed.n");
}
public function MakePropertyValue($name,$value)
{
$oStruct = $this->osm->Bridge_GetStruct("com.sun.star.beans.PropertyValue");
$oStruct->Name = $name;
$oStruct->Value = $value;
return $oStruct;
}
public function transform($input_url, $output_url)
{
$args = array($this->MakePropertyValue("Hidden",true));
$oDesktop = $this->osm->createInstance("com.sun.star.frame.Desktop");
$oWriterDoc = $oDesktop->loadComponentFromURL($input_url,"_blank", 0, $args);
$export_args = array($this->MakePropertyValue("FilterName","writer_pdf_Export"));
$oWriterDoc->storeToURL($output_url,$export_args);
$oWriterDoc->close(true);
return $this->getPdfPages($output_url);
}
public function run($input,$output)
{
$input = "file:///" . str_replace("\\","/",$input);
$output = "file:///" . str_replace("\\","/",$output);
return $this->transform($input, $output);
}
/**
* 获取PDF文件页数的函数获取
* 文件应当对当前用户可读(linux下)
* @param [string] $path [文件路径]
* @return int
*/
public function getPdfPages($path)
{
if(!file_exists($path)) return 0;
if(!is_readable($path)) return 0;
// 打开文件
$fp=@fopen($path,"r");
if (!$fp)
{
return 0;
}
else
{
$max=0;
while(!feof($fp))
{
$line = fgets($fp,255);
if (preg_match('/\/Count [0-9]+/', $line, $matches))
{
preg_match('/[0-9]+/',$matches[0], $matches2);
if ($max<$matches2[0]) $max=$matches2[0];
}
}
fclose($fp);
// 返回页数
return $max;
}
}
}
$con=new office2pdf();
$con->run("D:/xampp/htdocs/design/yuanwenjian/ax.xlsx","D:/xampp/htdocs/design/xinwenjian/ax.pdf");
echo $con->getPdfPages("D:/xampp/htdocs/design/xinwenjian/ax.pdf");
?>
四、pdf格式文件预览代码实现
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script src="../js/jquery-3.1.0.min.js" type="text/javascript" charset="utf-8"></script>
<script src="../js/jquery.media.js" type="text/javascript" charset="utf-8"></script>
<script src="../js/jquery.metadata.js" type="text/javascript" charset="utf-8"></script>
</head>
<body>
<a class="media {type: 'html'}" href="../output/ad.pdf"></a>
</body>
<script type="text/javascript">
$('a.media').media({width:1200, height:900});
</script>
</html>
五、参考博客
参考博客