php 上传word文件 Word文件转 PDF
说一下,之前的时候做上传word文档转pdf的项目时候, 通过安装open office 连接服务组件, 遇到种种问题, 例如上传的word文档版本,, word文档中编辑的样式复杂会出现转pdf失败抛出异常错误等等,
windows 服务器安装 Microsoft Office 2010 , 安装之后.
php开启dcom扩展
打开php.ini,查找php_com_dotnet和php_com_dotnet
把前面的分号去掉
extension=php_com_dotnet.dll
改为true
com.allow_dcom = true
注意:我先说一下,我Windows安装的是 Microsoft Office 2010哈
打开Windows 服务器按快捷键 win键+R, 输入 comexp.msc -32
打开之后
展开:组件服务->计算机->我的电脑->DCOM配置
寻找安装office办公的组件服务 Microfost Word 97 - 2003文档(如果找不到那就 win键+R输入:dcomcnfg)
找到之后点击属性打开窗口, 点击安全,设置成这样如图
启动和激活权限 和 访问权限 都使用自定义配置
第一:添加 Everyone 用户组,记得确认前先检查名称
第二:点击确定后给Everyone配置此权限
下面
访问权限也是如上面步骤配置权限
配置完成点击Microfost Office - 2003 文档属性顶部的标识菜单
如果是远程桌面连接的服务器你就点击单选: 下列用户然后输入用户名和密码 (为啥呢? 因为如果你单选交互式用户的话, 只有你远程连接服务器的时候才能使用此组件服务,断开远程桌面服务器就会抛出异常错误,所有远程桌面连接服务器的用户, 一定要单选[下列用户]:然后输入连接远程桌面的管理员账号和密码 )
如果是本地的就选择单选: 交互式用户
此时配置完成组件服务了,
接下来就是php代码
public function doword_pdf($source=""D:\www\demo.docx,$export="D:\www\demo.pdf") { //连接Microfoset Office服务组件 $word = new COM("Word.Application") or die ("Could not initialise Object."); if(!$word ){ die ("Word.Application 服务已停止"); } $word->Visible = 0; // 建议设置为0,禁用警报,如“你想要MS Word是默认的…等" $word->DisplayAlerts = 0; // 打开Word文档,2007-2013 //要处理的word文件 , 这个是绝对文件路径 $word->Documents->Open($source); // save it as word 2003 // convert word 2007-2013 to PDF //要转出的pdf文件 绝对路径 $word->ActiveDocument->ExportAsFixedFormat($export, 17, false, 0, 0, 0, 0, 7, true, true, 2, true, true, false); // quit the Word process $word->Quit(false); // clean up unset($word); return $export; } 获取pdf页数 public function pdf_pagenum($path) { $stream = fopen($path, "r"); $content = fread ($stream, filesize($path)); if(!$stream || !$content) return 0; $count = 0; // Regular Expressions found by Googling (all linked to SO answers): $regex = "/\/Count\s+(\d+)/"; $regex2 = "/\/Page\W*(\d+)/"; $regex3 = "/\/N\s+(\d+)/"; if(preg_match_all($regex, $content, $matches)) $count = max($matches); return $count; }