听·时光

# Windows环境下用PHP实现Office文档预览的方法

开发 Tags: php 阅读: 924

实现Office文档的预览的方法大致有两大类,一类是直接调用第三方接口或插件,二是在本地部署环境编写代码来实现。
第一类方法可以用的接口或插件有IDocView或者NTKO OFFICE。这种方法的优点是使用方便,可以实现诸如在线编辑Office文档等功能。但是需要收费,对于免费版有诸多功能限制。
下面主要介绍下第二类在本地实现预览的方法。本地实现预览的方法思路如下:

  1. (1)将Office文档转换成pdf文档
  2. (2)将转换生成的pdf文档再次转换成swf文件
  3. (3)在线预览生成的swf文件

    将Office文档转换成pdf文档

    为将Office文档转换成pdf,需在本地搭建Java环境以及下载jodconverter,并且需要安装OpenOffice
    环境配置好后,可以在本地运行PHP代码将word或ppt等文档转换成pdf:

    $command = 'java -jar ./jodconverter-2.2.2/lib/jodconverter-cli-2.2.2.jar "'.$URL.'" "'.$URL.'.pdf"';
    exec("pi.bat");
    exec($command);
    其中$URL为目标文件。真正运行转换语句前还需要运行一个批处理文件,否则是无法转换成功的。pi.bat文件的代码如下:

    @echo off
    set filename=soffice.exe
    set filepath="C:\Program Files\OpenOffice 4\program"
    start %filepath%%filename% soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard
    Exit

    将转换生成的pdf文档再次转换成swf文件

    为了将pdf文档转换生成swf文件,需要安装swftools软件。软件安装好后,需要将其安装路径(默认C:\Program Files\SWFTools)添加到windows系统的path路径。执行完上述操作后,运行如下PHP代码:

    $command2 = 'pdf2swf -o "'.$URL.'.pdf.swf" -T -z -t -f "'.$URL.'.pdf" -s flashversion=9';
    exec($command2);
    如果PPT文件比较大,为了减少最后生成的swf文件的大小,可以为$command2语句多添加一个参数,这样最后生成的swf文件较小。

    $command2 = 'pdf2swf -o "'.$URL.'.pdf.swf" -T -z -t "'.$URL.'.pdf" -s poly2bitmap -s flashversion=9';

    在线预览生成的swf文件

    在线预览swf文件需要用到FlexPaper。具体代码可以参考下载的FlexPaper中的例子。

    方法点评

    用此方法可以借助开源软件实现Office文档的在线预览,不过需要单位或公司有自己的服务器。经过实际项目验证,发现第一遍预览2M~3M大小的ppt文件速度比较慢,而第一遍预览word文件速度比较快。其原因是word文件一般就是500K左右大小。
    实际项目可以这样处理:如果已经生成了对应的Office文档的swf文件,就不要再次生成了,直接利用FlexPaper把swf文件在网页上显示出来,这样就省去了处理Office文档的时间,可以让后面的用户再次预览文档时速度更快。

参考:php实现word文档在线浏览功能,配置安装手记

发表评论