windows系统下,php调用office2010将word转为pdf
2021-04-15 admin php laravel windows 1765
Linux系统运行php效率很高,在大多数情况下一般都用linux。近日却遇到一个问题,需要将生成的word文档转换为pdf,使用libreoffice转换虽然可以,但效果不好,转换后很多样式都变化了。想到office还是要在windows系统中兼容性最好,于是使用PHP COM组件来调用office软件转换,取得了很好的效果。
一、将服务器系统切换为windows 2016 64位中文版
安装好宝塔环境好,下载office2010,网上许多下载链接都是假的,找了许久才找到iso镜像文件:
http://www.7xdown.com/downinfo/8800.html
然后配置office组件服务,按 win+R 快捷键进入运行菜单,输入:mmc -32
[文件]——[添加或删除管理单元]——[组件服务](从可用管理单元,添加到所选管理单元,点击:确定),添加完以后,在控制台根节点下,找到【wps……】或[Microsoft Wrord 97-2003文档],右键设置属性,设置“标识”为:交互式用户
二、配置php环境
打开php.ini文件,搜索:
com.allow_dcom
将前面的分号去除,并修改为:
com.allow_dcom = true
在后面添加一行:
extension=php_com_dotnet.dll
结果在new com时报错,提示:
com() has been disabled for security reasons
解决办法是,搜索disable_classes,在disable_classes = com这行前面,加一个分号注释掉。
重启php即可。
三、laravel框架调用office转换
需要注意的是,new后面要加反斜杠,调用原生的php类,具体代码如下:
//调用office2010将word转pdf
public function topdf($file){
$filenamedoc = public_path($file);
$filenamepdf = public_path(str_replace('docx','pdf',$file));
try {
$word = new \COM('word.application');
$word->Visible = 0;
$word->DisplayAlerts = 0;
$word->Documents->Open($filenamedoc);
if(file_exists($filenamepdf))unlink ($filenamepdf);//存在就删除
$word->ActiveDocument->ExportAsFixedFormat($filenamepdf, 17, false, 0, 0, 0, 0, 7, true, true, 2, true, true, false);
$word->Quit(false);
unset($word);
return str_replace('docx','pdf',$file);
} catch (Exception $ex) {
dd($ex);
}
}
转换效果非常好,几乎和word一样。