zoukankan      html  css  js  c++  java
  • tp5 使用phpword 替换word模板并利用com组件转换pdf

    tp5   使用phpword 替换word模板并利用com组件转换pdf

    一、首先composer安装PHPword,就不多说了

    二、然后是把模板中要替换的部分用变量代替

    三、把原始的模板文件放入项目目录,tp框就放在了public/upload/目录下

    四、

    查看php.ini中是否已经开启了com.allow_dcom = true
    
    从php/ext/里面查找一下有没有这个php_com_dotnet.dll这个文件
    
    如果没有网上下载个,一般都会有的吧应该大概可能。。
    
    然后查找这个php.ini里面查找下#extension=php_com_dotnet.dll把前面的#号去掉
    
    如果找不到就复制,手动添加一下
    
    
    
    然后输出下phpinfo()
    
    看看有没有com_dotnet
    COM support enabled
    DCOM support enabled
    .Net support       enabled
    
    表示COM组件开启成功

    五、

    然后新建一个php文件在里面写上:
    
    $com = new COM('word.application');  (#注意word.application 是电脑中必须有word文档才可以的)
    echo $com;
    
    如果没错的话应该会显示    Microsoft Word
    说明COM扩展已经安装完成了!

    六、代码

     1  public function word2pdf()
     2     {
     3 
     4 
     5         $server=$_SERVER['DOCUMENT_ROOT'];
     6 //        $filenamedoc =$server.'/upload/basedoc/one.docx';
     7         $filenamedoc =$server.'/'.$templet['url'];//模板路径
     8         $filenamepdf = $server.'/upload/basedoc/one'.$templet['id'].'_new.docx';//替换变量,新的word路径
     9         $fiel='/upload/basedoc/one'.$templet['id'].'_new'.time().'.pdf';//word转换pdf路径
    10         $pdf = $server.$fiel;
    11         $tmp=new PhpOfficePhpWordTemplateProcessor($filenamedoc);//打开模板
    12         $tmp->setValue('name',$sq);
    13         $tmp->setValue('hcwz',$hcwz);
    14 
    15         $tmp->setValue('ayear',$apply_date_y);
    16         $tmp->setValue('amonth',$apply_date_m);
    17         $tmp->setValue('aday',$apply_date_d);
    18 
    19         $tmp->setValue('year',date("Y",time()));
    20         $tmp->setValue('month',date("m",time()));
    21         $tmp->setValue('day',date("d",time()));
    22         $tmp->setValue('mishu',$mishu);//${year}年${month}月${day}
    23         $tmp->saveAs($filenamepdf);//另存为
    24         $url=word2pdf($filenamepdf,$pdf);
    25         return config("PdfUrl").$fiel;
    26 
    27     }
    function word2pdf($srcfilename,$destfilename)
    {
        try {
            if(!file_exists($srcfilename)){
                unlink($srcfilename);
            }
            $word = new COM("word.application") or die("Can't start Word!");
            $word->Visible=0;
            $word->Documents->Open($srcfilename, false, false, false, "1", "1", true);
            $word->ActiveDocument->final = false;
            $word->ActiveDocument->Saved = true;
            $word->ActiveDocument->ExportAsFixedFormat(
                $destfilename,
                17,                         // wdExportFormatPDF
                false,                      // open file after export
                0,                          // wdExportOptimizeForPrint
                3,                          // wdExportFromTo
                1,                          // begin page
                5000,                       // end page
                7,                          // wdExportDocumentWithMarkup
                true,                       // IncludeDocProps
                true,                       // KeepIRM
                1                           // WdExportCreateBookmarks
            );
            $word->ActiveDocument->Close();
            $word->Quit();
        } catch (Exception $e) {
            if (method_exists($word, "Quit")){
                $word->Quit();
            }
            return;
        }
    }
    七、权限问题
    如果你有权限问题比如不能打开或保存文档,可能出现这样的错误:
    
    由于没有打开文档,所以无法使用此命令
    
    或
    
    ——命令失败
    
    试试这个(如果你正在运行IIS):
    
    ——执行“dcomcnfg”
    
    -打开组件服务>计算机>我的计算机> DCOM配置
    
    -搜索Microsoft Office Word 97- 2003文档(它会像这样翻译成你的语言,所以花点时间搜索一下)
    
    -右键单击并打开属性
    
    ——选择“身份”选项卡
    
    -通常情况下设置为“启动用户”。您必须将其更改为“交互式用户”或您选择的管理用户。
    
    

    如果还是有问题,就要捕获异常信息了,建议放在try  catch里面

    告诫一下,本机安装的office一定下载完整版,否则转换pdf一直失败(如果一直失败,可能是缺少插件Save As PDF and XPS插件 正式版

    下载地址:http://www.onlinedown.net/soft/1109902.htm,也可以自己在网上找一个安装

    配置不难,但小细节需要注意,否则一个小问题就被搞死。

  • 相关阅读:
    HDU 1102 Constructing Roads
    HDU 1285 确定比赛名次。
    最小生成树 HDU 各种畅通工程的题,prim和kru的模板题
    HDU Jungle Roads 1301 最小生成树、
    并查集小结(转)
    HDU hdu 2094 产生冠军 拓扑排序 判定环
    模运算(转)
    拓扑排序(主要是确定环和加法) HDU 2647 Reward
    HDU 1372 Knight Moves 简单BFS
    用计算机模型浅析人与人之间沟通方式 (一)如何谈话
  • 原文地址:https://www.cnblogs.com/wrld/p/11704389.html
Copyright © 2011-2022 走看看