doc(x) xls(x) ppt(x) pdf 的在线预览

作者: 魔力小小鸟 | 来源:发表于2016-08-16 14:07 被阅读794次

    说明:

    达到功能:doc(x) xls(x) ppt(x) pdf 的在线预览

    基本思路:

    doc(x) ==> pdf ==> swf ==> 输出预览
    ppt(x) ==> pdf ==> swf ==> 输出预览
    xls(x) ==> html ==> 输出预览
    pdf ==> swf ==> 输出预览

    使用软件:

    doc(x) ==> pdf: Microsoft Office / OpenOffice
    ppt(x) ==> pdf: Microsoft Office / OpenOffice
    xls(x) ==> html: Microsoft Office / OpenOffice
    pdf ==> swf:SWFTools 网址:http://www.swftools.org/
    swf输出预览:FlexPaper 网址:http://flexpaper.com/

    具体应用:

    1、doc(x) ==> pdf (使用word)

    注意:

    1、若为相对路径,此相对路径 并非相对 PHP文件
    2、方法中传入需要是变量,不能直接传递字符串
    3、SaveAs方法的第二个参数 需为 17 (指定保存类型)
    4、保存的文件 必须是补充名的
    PHP代码如下:

    $docx_name = "E:/wamp/www/a.docx";
    $pdf_name = "E:/wamp/www/b.pdf";
    
    $docx = new COM("word.application") or die();
    $docx->Visible = 1;  //1-显示出来,0-后台操作
    $type = 17;  //保存类型
    $docx->Documents->Open($docx_name)->SaveAs($pdf_name, $type);
    $docx->Quit();
    

    2、ppt(x) ==> pdf (使用ppt)

    $ppt_name = "E:/wamp/www/a.pptx";
    $pdf_name = "E:/wamp/www/a.pdf";
    $ppt = new COM("PowerPoint.Application") or die();
    $ppt->Visible = 1;
    $type = 32;
    $ppt->Presentations->Open($ppt_name)->SaveAs($pdf_name, $type);
    $ppt->Quit();
    

    3、xls(x) ==> html (使用excel)

    注意:
    1、保存类型 参数为 44
    PHP代码如下:

    $excel_name = "E:/wamp/www/a.xlsx";
    $pdf_name = "E:/wamp/www/a.html";
    
    $excel = new COM("excel.application") or die();
    $excel->Visible = 1;  //1-显示出来,0-后台操作
    $type = 44;
    $excel->Application->WorkBooks->Open($excel_name)->SaveAs($pdf_name, $type);
    $excel->Quit();
    

    4、doc(x)/xls(x)/ppt(x) ==> pdf/html (使用openoffice)

    注意:
    1、文件路径需要加 file:///
    PHP代码如下:

    function get_property($office, $property_parameter_array){
        $property_parameter_obj_array = array();
        foreach($property_parameter_array as $key => $value){
            $property = $office->Bridge_GetStruct("com.sun.star.beans.PropertyValue");
            $property->Name = $key;
            $property->Value = $value;
            array_push($property_parameter_obj_array, $property);
        }
        return $property_parameter_obj_array;
    }
    function word2pdf($doc_url, $output_url){
        $office = new COM("com.sun.star.ServiceManager") or die ("失败");
        $Desktop = $office->createInstance("com.sun.star.frame.Desktop");
        $property = get_property($office, array("Hidden"=>false));
        $WriterDoc = $Desktop->loadComponentFromURL("file:///".$doc_url, "_blank", 0, $property);
        //$property = get_property($office, array("FilterName"=>"writer_pdf_Export"));  //pdf
        $property = get_property($office, array("FilterName"=>"HTML (StarWriter)", "Overwrite"=>true));  //html
        $WriterDoc->storeToURL("file:///".$output_url, $property);
        $WriterDoc->close(true);
    }
    $doc_file =  "E:/wamp/www/study/online_see/a.docx";
    $output_file = "E:/wamp/www/study/online_see/a.pdf";
    word2pdf($doc_file, $output_file);
    

    5、pdf ==> swf

    注意:
    1、PHP执行命令行 语句(可以将pdf2swf.exe加入环境变量)
    2、-o 为输出路径
    3、输出的文件名 带上 百分号"%" ==> 每页pdf单独为一个swf文件
    PHP代码如下:

    $pdf_name = 'E:/wamp/www/a.pdf';
    $swf_name = 'E:/wamp/www/a%.swf';
    $cmd = "E:/wamp/www/pdf2swf.exe {$pdf_name} -o {$swf_name} -f -T 9 -t -s storeallcharacters";
    exec($cmd);
    

    6、swf 输出预览:

    注意:
    1、需要引入3个js文件:
    flexpaper_flash.js
    flexpaper_flash_debug.js
    jquery.js
    2、会使用到FlexPaperViewer.swf
    3、swfFile:第一个参数是swf文件名
    a[x,0] 表示 a1 a2 a3 ... a10 a11 ...
    a[x,1] 表示 a01 a02 a03 ... a10 a11 ...
    4、swfFile:第二个参数是swf的个数(pdf的页数)
    HTML代码如下:

    <script type="text/javascript" src="./js/jquery.js"></script>
    <script type="text/javascript" src="./js/flexpaper_flash.js"></script>
    <script type="text/javascript" src="./js/flexpaper_flash_debug.js"></script>
    
    <div style="position:absolute;left:0px;top:0px;">
        <a id="viewerPlaceHolder" style="display:block"></a>
    </div>
    
    <script type="text/javascript">
    document.getElementById("viewerPlaceHolder").style.height = document.body.clientHeight;
    document.getElementById("viewerPlaceHolder").style.width = document.body.clientWidth;
    var fp = new FlexPaperViewer(
            'FlexPaperViewer',
            'viewerPlaceHolder',
            {
                config: {
                    SwfFile: "{./a[*,0].swf,20}",
                    Scale: 1.2,  //显示比例
                    ZoomTransition: 'easeOut',
                    ZoomTime: 0.5,  //缩放时间/多久能够缩放到位
                    ZoomInterval: 0.2,  //页面缩放的步长
                    FitPageOnLoad: false,  //是否单页适应
                    FitWidthOnLoad: false,  //是否宽度适应
                    PrintEnabled: false,
                    FullScreenAsMaxWindow: false,  //是否全屏??
                    ProgressiveLoading: false,  //逐行加载??
                    MinZoomSize: 0.2,  //缩小最小
                    MaxZoomSize: 5,  //放大最大
                    SearchMatchAll: false,
                    InitViewMode: 'Portrait',
                    PrintToolsVisible: false,
                    ViewModeToolsVisible: false,  //单页/双页显示/旋转等阅读工具
                    ZoomToolsVisible: true,  //放大缩小工具是否显示
                    NavToolsVisible: true,  // < >  页面的选择
                    CursorToolsVisible: false,  //能否选中复制文字
                    SearchToolsVisible: true,  //搜索框
                    localeChain: 'en_US'
                }
            });
    

    部分错误解决方案:

    1、DOM无法使用:

    修改配置文件php.ini

    com.allow_dcom=true   //5.4.5版本之前
    extension=php_com_dotnet.dll   //5.4.5版本之后:
    

    2、无法读取文件:

    1、确保文件路径正确,文件存在
    2、权限问题:win环境修改DCOM:
    打开组件服务: dcomcnfg.exe
    组件服务-计算机-我的电脑-DCOM配置-Word/Excel/ppt/openoffice
    右键属性:
    安全 改成 自定义(如果保存不了,编辑进去 随意取消一个再勾选)
    标识 交互式用户

    3、保存的类型参数:

    word:https://msdn.microsoft.com/en-us/library/office/ff839952.aspx
    excel:https://msdn.microsoft.com/en-us/library/office/ff198017.aspx
    ppt:https://msdn.microsoft.com/zh-tw/library/office/ff746500.aspx

    4、ppt(x)转pdf出现错误:

    Fatal error: Uncaught exception 'com_exception' with message 'Source: Microsoft PowerPoint 2013 Description: Presentation.SaveAs : PowerPoint 无法将 ^0 保存到 ^1。
    具体原因不知道,可能是版本或者配置关系?
    2013版本的失败,2010版本的成功。

    5、预览的打印按钮及广告 无法去除:

    需要重新从源码编译FlexPaperViewer.swf文件

    相关文章

      网友评论

        本文标题:doc(x) xls(x) ppt(x) pdf 的在线预览

        本文链接:https://www.haomeiwen.com/subject/lbepsttx.html