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,也可以自己在网上找一个安装

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

  • 相关阅读:
    SQL Server AUTO_FIX_Login_Users
    SQL Server Always On 切换主机Login和User无法匹配解决方案
    SQL Server 目标主体名称不正确,无法生成 SSPI 上下文
    SQL Server Rebuild Index
    jqery和js如何判断checkbox是否选中 (转)
    jxl
    jxl 管理excel
    Bootstrap库之Modals
    jquery attr()
    js 验证数字(验证字符串是否是数字)
  • 原文地址:https://www.cnblogs.com/wrld/p/11704389.html
Copyright © 2011-2022 走看看