使用PHP扩展COM解决word文档转PDF问题

公司最近在一个政府项目,要把需要的word文件在线预览出来,想到PDF原生对浏览器的友好支持,所以想到把做好的word文件先转成PDF,然后再输出出去,现在把做这个事情遇到的一些坑,总结一下!

1.开启php的dcom扩展

打开php.ini,搜索php_com_dotnet和php_com_dotnet:

extension=php_com_dotnet.dll //把前面的分号去掉

com.allow_dcom = true //改为true
然后重启apache或nginx服务。

2.服务器上安装office组件

我们公司目前都是用的windows服务,看自己的系统,因为项目中需要使用PHPOffice/PHPWord把文档中的变量转成需要的值,而这个库只支持docx,所以word的版本不能低于word2007,具体安装和激活office的过程这里我就不多说了,自己百度或google去。

3.服务器开启组件服务权限

我们的具体代码如下:

1
2
3
4
5
6
$word = new COM("Word.Application") or die ("Could not initialise Object.");
$word->Visible = 0;
$word->DisplayAlerts = 0;
$word->Documents->Open($print->createFile); //$print->createFile 是具体word文件的路径
$word->ActiveDocument->ExportAsFixedFormat($print->createPdfFile, 17, false, 0, 0, 0, 0, 7, true, true, 2, true, true, false);//转换为pdf模式 $print->createPdfFile 是生成的pdf文件的路径
$word->Quit(false);

如果没有开启组件服务权限的话,使用COM扩展的话会报下面这样的错误:

1
Can't open Word doc with COM in PHP

为了解决这个问题,查询N多网站,最后还是在stackoverflow.com上面找到了解决方式:

  1. ctrl + R打开运行。
  2. 输入mmc -32,然后回车,打开控制台1。
  3. 点击文件-添加或删除管理单元,然后在左侧找到组件服务,点击添加,然后点击确定。
  4. 然后在控制台1的界面就会看到控制台根节点下面有了组件服务,然后依次点击计算机-我的电脑-DCOM配置
  5. 在里面找到Microsoft Office Word 97-2003,这里才是重点,右键属性-标识,然后选中交互式用户,点击应用,然后确定。

大功告成,试试看下你的COM扩展库生效了没吧!

参考地址:https://stackoverflow.com/questions/12104775/cant-open-word-doc-with-com-in-php