柔晶美网络工作室

柔晶美网络工作室,倾心于web技术的博客站点

关注我 微信公众号

您现在的位置是: 首页 > 博客日记

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一样。

文章评论


需要 登录 才能发表评论
热门评论
0条评论

暂时没有评论!