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;
}

 

posted @ 2018-03-26 10:34  Makes一生  阅读(1645)  评论(0编辑  收藏  举报