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 \PhpOffice\PhpWord\TemplateProcessor($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,也可以自己在网上找一个安装
配置不难,但小细节需要注意,否则一个小问题就被搞死。
成为不了聪明的人,那就做一个有耐心、肯钻研,坚持不懈,永不放弃的人……