PHP实现Word与excel等转换pdf方法
下面是操作步骤:
1、安装免费的openOffice软件,请至openoffice.org下载最新版本。
2、JDK支持,请自行搜索下载最新版本JDK。
3、安装完openOffice后,在开始--运行中输入Dcomcnfg打开组件服务。在组件服务—计算机—我的电脑—DCOMP配置中,选择
在这两项上分别点击右键属性,打开属性面板如下图:
选择安全选项卡,分别在启动和激活权限和访问权限两项上点自定义,添加Everyone的权限。
选择标识选项卡,选择交互式用户。
4、安装完openOffice后,请先打开一次确认可以正常运行软件,然后退出后用命令行运行以下命令。
先到安装目录下,例如:C:Program FilesOpenOffice 4program
执行命令:
soffice -headless-accept='socket,host=127.0.0.1,port=8100;urp;' -nofirststartwizard
成功后即在后台运行了该软件。
5、如果是php5.4.5以前版本,需要在php.ini里把com.allow_dcom = true打开,即去掉前面的分号。如果是以后版本,需要在php.ini 里增加一行扩展extension=php_com_dotnet.dll,然后检查php的ext目录中是否存在该dll文件,如果没有请自行下载对应版本的dll。然后重启apache或IIS服务器。
6、代码实现
/** * office文档转换为PDF类 * @author jinzhonghao <954299193@qq.com> created 2015-04-23 */class office2pdf{private $osm;public function __construct(){$this->osm = new COM('com.sun.star.ServiceManager')or die ('Please be sure that OpenOffice.org is installed.n'); }public function MakePropertyValue($name,$value){$oStruct = $this->osm->Bridge_GetStruct('com.sun.star.beans.PropertyValue');$oStruct->Name = $name;$oStruct->Value = $value;return $oStruct;}public function transform($input_url, $output_url){$args = array($this->MakePropertyValue('Hidden',true));$oDesktop = $this->osm->createInstance('com.sun.star.frame.Desktop');$oWriterDoc = $oDesktop->loadComponentFromURL($input_url,'_blank', 0, $args);$export_args = array($this->MakePropertyValue('FilterName','writer_pdf_Export'));$oWriterDoc->storeToURL($output_url,$export_args);$oWriterDoc->close(true);return $this->getPdfPages($output_url);}public function run($input,$output){$input = 'file:///' . str_replace('','/',$input);$output = 'file:///' . str_replace('','/',$output);return $this->transform($input, $output);}/** * 获取PDF文件页数的函数获取 * 文件应当对当前用户可读(linux下) * @param [string] $path [文件路径] * @return int */public function getPdfPages($path){if(!file_exists($path)) return 0;if(!is_readable($path)) return 0;// 打开文件$fp=@fopen($path,'r');if (!$fp) {return 0;}else {$max=0;while(!feof($fp)) {$line = fgets($fp,255);if (preg_match(’//Count [0-9]+/’, $line, $matches)){preg_match(’/[0-9]+/’,$matches[0], $matches2);if ($max<$matches2[0]) $max=$matches2[0];}}fclose($fp);// 返回页数return $max;}}}
相关文章: